9

如何强制UriHttpWebRequest允许包含两者的uri /%2f如下所示?

http://localhost:55672/api/exchanges/%2f/MyExchange

我试过这个...

WebRequest request = 
    HttpWebRequest.Create("http://localhost:55672/api/exchanges/%2f/MyExchange");

...还有这个...

Uri uri = new Uri("http://localhost:55672/api/exchanges/%2f/MyExchange", true);
WebRequest request = HttpWebRequest.Create(uri);

...还有这个...

UriBuilder builder = new UriBuilder();
builder.Port = 55672;
builder.Path = "api/exchanges/%2f/MyExchange";
WebRequest request = HttpWebRequest.Create(builder.Uri);

但是,所有这些request.RequestUri最终http://localhost:55672/api/exchanges///MyExchange都会request.GetResponse()产生 404 响应。

仅供参考,我正在尝试使用 RabbitMQ 的 HTTP API 并在 Chrome 中键入 Url 会产生预期的 JSON 结果。

4

4 回答 4

7

我们刚刚遇到了同样的问题,发现如果您的目标是 .NET 4.0 框架,就会存在这个问题。如果您以 .NET 4.5 框架为目标,它就会消失。因此,如果这是您的选择,请切换您的目标框架,它应该可以解决您的问题。

于 2013-07-23T21:12:12.180 回答
5

不久前与 RabbitMQ 管理 API 通信时,我遇到了同样的问题。我写了一篇关于它的博客文章,包括几个解决方案:

http://mikehadlow.blogspot.co.uk/2011/08/how-to-stop-systemuri-un-escaping.html

您可以通过对 System.Uri 代码的一些讨厌的反射或通过 App.config(或 Web.config)中的设置来关闭该行为:

<uri> 
    <schemeSettings>
        <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes" />
    </schemeSettings>
</uri>
于 2013-07-24T09:59:58.913 回答
2

请使用 Server.UrlEncode 它是服务器端必需的,否则将是 System.Uri.EscapeDataString

于 2012-07-13T20:40:21.967 回答
1

对包含保留字符的部分使用 Server.Encode。 http://msdn.microsoft.com/en-us/library/ms525738(v=vs.90).aspx

于 2012-07-13T20:37:24.587 回答