带有大型查询字符串的WCF UriTemplate

时间:2009-07-28 16:03:46

标签: c# wcf

我正在处理一个相当大的查询字符串(~30 +参数),我正在尝试将它们传递给我设置的WCF服务。

我遇到了一些特别针对UriTemplate字段的问题。此服务设置为访问第三方Api,因此查询字符串可能包含也可能不包含所有参数。我很好奇,如果最好的方法是构建一个查询字符串并将其传递给WCF服务或者单独传递每个参数(在某些情况下是String.Empty)。

我目前试图动态建立一个查询字符串,但是当我尝试将整个字符串(“?prm1 = val& prm2 = val”)传递到ucumplate时,我遇到了403错误。 “ApiTool.jsp {query}”,或者由于我没有列出名称/值对,我点击了无效的uritemplate响应。

2 个答案:

答案 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&param2=b" } });
    Console.WriteLine(u); // http://localhost/Api.jsp%3Fparam1=a&param2=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对象。