Url在.NET中编码前向斜杠(/)

Cla*_*lay 7 c# url rabbitmq

我如何强迫UriHttpWebRequest允许包含两者的uri /并且%2f喜欢以下内容?

http://localhost:55672/api/exchanges/%2f/MyExchange
Run Code Online (Sandbox Code Playgroud)

我试过这个......

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

...还有这个...

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

...还有这个...

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

然而,所有这些,request.RequestUri最终http://localhost:55672/api/exchanges///MyExchangerequest.GetResponse()产生404响应.

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

小智 7

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


Mik*_*low 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>
Run Code Online (Sandbox Code Playgroud)