我正在尝试使用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;
}
}
答案 0 :(得分:1)
您可能希望在.NET 4.5中进行测试,因为对转义字符的Uri解析进行了一系列改进。
您还可以查看此问题:GETting a URL with an url-encoded slash已发布黑客攻击,可用于强制URI不被触及。
答案 1 :(得分:0)
作为一种解决方法,您可以尝试再次编码此网址部分以避免此问题。 %3A将成为%253A