为什么 System.Net.Http HttpClient 对我的请求进行编码 URL?

Why is System.Net.Http HttpClient encoding my request URL?

我使用 System.Net.Http 中的 HttpClient 向 Web 服务发出如下请求:

using (var client = new HttpClient())
{
    using (var response = client.GetAsync(url).Result)
    {
        var result = response.Content.ReadAsStringAsync().Result;
    }
}

我有一个沙盒应用程序和一个实时应用程序。沙盒应用程序具有相同的代码(在共享存储库中)工作正常,但是当在实时应用程序中调用 client.GetAsync(url).Result 时,出于某种原因,Fiddler 向我显示请求的 URL 已被编码,这会弄乱请求起来。

请求的 URL 应该是这样的:

/advert?paginate=1&page=1&language=en&filters[updated_at][ge]=2016-03-21%2012:19:05

但最终看起来像这样:

/advert?paginate=1&page=1&language=en&filters%5Bupdated_at%5D%5Bge%5D=2016-03-21%2012:19:05

知道为什么吗?谢谢

N.B。我在 .NET Framework 4.5

中使用来自 Nuget 的 Microsoft.Net.Http 库
  1. 请详细说明您的问题:

    • 你用的Microsoft.Net.Http版本是什么?
    • 你在.NET版本下编译什么?
  2. 原来你是在 .NET 4.0 下编译的,我想说这是一个错误,因为行为与 .NET Fx 4.5 不一样 System.Http

您可以通过在 Uri class:

中将 dontEscape 设置为 true 来修复它
 var url = new Uri(@"http://google.com/advert?paginate=1&page=1&language=en&filters[updated_at][ge]=2016-03-21%2012:19:05", dontEscape: true);