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

时间:2016-03-21 14:55:33

标签: c# asp.net-mvc-4 dotnet-httpclient system.net.httpwebrequest

我使用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 个答案:

答案 0 :(得分:1)

  1. 请非常具体地说明您的问题:

    • 您使用的是Microsoft.Net.Http版本的内容吗?
    • 你在.NET版本下编译了什么?
  2. 原来你在.NET 4.0下编译,这是我要说的一个错误,因为行为与.NET Fx 4.5 System.Http

  3. 不同

    您可以通过在Uri类中将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);