我正在处理一个相当大的查询字符串(~30 +参数),我正在尝试将它们传递给我设置的WCF服务。
我遇到了一些特别针对UriTemplate字段的问题。此服务设置为访问第三方Api,因此查询字符串可能包含也可能不包含所有参数。我很好奇,如果最好的方法是构建一个查询字符串并将其传递给WCF服务或者单独传递每个参数(在某些情况下是String.Empty)。
我目前试图动态建立一个查询字符串,但是当我尝试将整个字符串(“?prm1 = val& prm2 = val”)传递到ucumplate时,我遇到了403错误。 “ApiTool.jsp {query}”,或者由于我没有列出名称/值对,我点击了无效的uritemplate响应。
答案 0 :(得分:0)
我很确定您需要单独列出参数。否则,UriTemplate将最终为您逃避:
var ut = new UriTemplate("Api.jsp{query}");
var u = ut.BindByName(new Uri("http://localhost"), new Dictionary<string, string>() { { "query", "?param1=a¶m2=b" } });
Console.WriteLine(u); // http://localhost/Api.jsp%3Fparam1=a¶m2=b
答案 1 :(得分:0)
您可以使用IClientMessageInspector'unescape'查询字符串。
public class UriInspector: IClientMessageInspector
{
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
// change/replace request.Headers.To Uri object;
return null;
}
}
请参阅MSDN如何将此添加到您的Endpoint对象。