繁体   English   中英

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

[英]Url Encode Forward Slash (/) in .NET

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

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///MyExchangerequest.GetResponse()产生404响应。

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

我们遇到了同样的问题,并发现如果您的目标是.NET 4.0框架,则存在此问题。 如果你的目标是.NET 4.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>

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

请使用Server.UrlEncode它是必需的服务器端或备用将是System.Uri.EscapeDataString

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM