使用HttpClient保留转义的Uri

时间:2013-08-06 17:27:04

标签: c# escaping uri dotnet-httpclient

我正在尝试使用HttpClient使用以下Uri创建GET请求:

http://test.com?action=enterorder&ordersource=acme&resid=urn%3Auuid%3A0c5eea50-9116-414e-8628-14b89849808d 如您所见,resid param使用%3A进行转义,即“:”字符。

当我在HttpClient请求中使用此Uri时,url变为:

http://test.com?action=enterorder&ordersource=acme&resid=urn:uuid:0c5eea50-9116-414e-8628-14b89849808d我从服务器收到错误,因为预计会有%3A。

任何人都有任何关于在发送请求时如何保护转义的Uri的线索?在发送之前,似乎HttpClient始终在字符串上没有转义字符。 以下是使用的代码:

Uri uri = new Uri("http://test.com?action=enterorder&ordersource=acme&resid=urn%3Auuid%3A0c5eea50-9116-414e-8628-14b89849808d");
using (HttpClient client = new HttpClient())
{
   var resp = client.GetAsync(uri);
   if (resp.Result.IsSuccessStatusCode)
      {
        var responseContent = resp.Result.Content;
        string content = responseContent.ReadAsStringAsync().Result;
      }
}

2 个答案:

答案 0 :(得分:1)

您可能希望在.NET 4.5中进行测试,因为对转义字符的Uri解析进行了一系列改进。

您还可以查看此问题:GETting a URL with an url-encoded slash已发布黑客攻击,可用于强制URI不被触及。

答案 1 :(得分:0)

作为一种解决方法,您可以尝试再次编码此网址部分以避免此问题。 %3A将成为%253A