3

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

http://test.com?action=enterorder&ordersource=acme&resid=urn%3Auuid%3A0c5eea50-9116-414e-8628-14b89849808d 如您所见,resid 参数用 %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;
      }
}
4

2 回答 2

1

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

您还可以查看这个 SO 问题:GETting a URL with an url-encoded slash,其中发布了一个 hack,您可以使用它来强制 URI 不被触及。

于 2013-12-25T05:28:24.990 回答
0

作为一种解决方法,您可以尝试再次编码此 url 部分以规避该问题。%3A 将变为 %253A

于 2013-08-06T18:55:10.867 回答