C#HttpClient URI没有正确转义

时间:2016-08-26 07:50:45

标签: c# dotnet-httpclient

我正试图让我的网址逃脱,但它无法正常工作。具有讽刺意味的是,当我执行这部分代码时,在我的MacBook上

Uri url = new Uri("http://www.example.com/?i=123%34", true);
// it returns http://www.example.com/?i=123%34 which is exactly what I want.

问题是我的IDE说它已经过时了,它在我的Windows机器上不起作用。这是完全相同的项目和IDE。所以我试图找到一个有人建议的解决方案

Uri uri = new Uri(Uri.EscapeUriString("http://www.example.com/?i=123%34")); 
// this returns http://www.example.com/?i=123%2534 which is what I DONT want.

那么我该如何解决这个问题呢?我浏览了整个网络,找不到任何解决方案。我需要知道如何正确地逃避这个URL。上面发布的第二种方法与上面的第一种方法不同。

我通过Fiddler验证了GET请求,所以一切都确实发生了。

更新

同样,我需要服务器接收URL到底是如何声明字符串的。我希望服务器处理转换。我不能用%25替换%符号。必须完全接收我声明字符串的方式。此外,“http://www.example.com/?i=1234”也不是我想要的。

2 个答案:

答案 0 :(得分:0)

如果您对字符串读取ht tp://www.example.com/?i = 1234没问题,您可以尝试 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)/index(/*)$ index.php?lang=$1 [L] RewriteRule ^(.+)/links(/*)$ links.php?lang=$1 [L]

答案 1 :(得分:0)

问题在于Windows上的Web服务器配置,允许双重转义。您的原始网址为http://www.example.com/?i=123%34,未转义时会变为http://www.example.com/?i=1234

另一方面,Windows上的Web服务器再次转义%字符而不是转义%34。因此,它变成了http://www.example.com/?i=123%2534

这就是为什么在转义之前不应在网址中使用%之类的字符。

编辑 -

我在Firefox中输入以下两个网址,以了解服务器上如何接收参数。

http://www.example.com/?i=123%34i的值为1234

http://www.example.com/?i=123%2534i的值为123%34

如果服务器必须接收%字符,则必须对其进行转义,以便通过HTTP分派它。实际上没有其他方法可以通过网络发送它。如果您没有转义%字符,它将与34一起视为转义序列,并在服务器上自动转为4

如果您的网络检查员在请求中向您显示未转义的文字,那是因为它会在向您展示之前对其进行美化。