将WCF查询参数作为单个字符串进行检索

时间:2017-02-10 10:48:42

标签: wcf url query-string uritemplate

我需要定义一个WCF GET方法,该方法可以将所有查询参数检索为单个字符串。例如:

https://xxx.xxx.xxx.xxx/token?client_id=abc_def&client_name=&type=auth&code=xyz

我想抓住字符串" client_id = abc_def& client_name =& type = auth& code = xyz"。

如何为方法定义URI模板?我尝试了以下方法,但它没有工作,因为我将收到400 Bad Request。替换/"用"?"没有区别。

[WebGet(UriTemplate = "token/{Params}")]
[OperationContract]
Stream GetToken(string Params);

该方法将调用外部服务,并转发它接收的任何查询参数。我不想单独检索每个参数,因为参数可能会增加。

另一个网址是这样的:

https://xxx.xxx.xxx.xxx/person/123456?client_id=abc_def&client_name=&type=auth&code=xyz

在这种情况下,我想抓住两个字符串" 123456"和" client_id = abc_def& client_name =& type = auth& code = xyz"。

如何为方法定义URI模板?

2 个答案:

答案 0 :(得分:0)

您可以在UriTemplate中设置预期的查询字符串参数,如下所示:

(UriTemplate = "token/{Params}&client_id={clientId}&client_name={clientName}&type={type}&code={code})

该方法可以这样声明:

Stream GetToken(string Params, string clientId, string clienteName, string type, string code);

答案 1 :(得分:0)

您可以省略URI模板并使用NameValueCollection WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters 然后只需进行'ToString()'调用即可获得所需内容

String fullQueryParams = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters.ToString()

如果您还需要路径,例如检索网址中的person123456字符串:

https://xxx.xxx.xxx.xxx/person/123456?client_id=abc_def&client_name=&type=auth&code=xyz

您可以使用WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RelativePathSegments。然后你的OperationContract实现将是这样的:

String fullQueryParams = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters.ToString();
//fullQueryParams = "client_id=abc_def&client_name=&type=auth&code=xyz"

var pathsCollection = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RelativePathSegments;
//pathsCollection = ["person","12345"]