我需要定义一个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模板?
答案 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()
如果您还需要路径,例如检索网址中的person
和123456
字符串:
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"]