0

我使用HttpClient的在System.Net.Http发出请求到如下Web服务:为什么System.Net.Http HttpClient编码我的请求URL?

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框架4.5

+0

https://en.wikipedia.org/wiki/Percent-encoding – CSharpie

+1

这第二url代表第一个完全合法的方式。这听起来像是,如果有的话,接收请求的服务在正确编码的URL中存在问题。 – JLRishe

+0

@CSharpie:我明白网址编码的重点,但是(特别是)方括号的意外编码是我感到困惑的地方。特别是因为相同的代码在另一个项目中的作用不同。 – Jimbo

回答

1
  1. 使用Microsoft.Net.Http库从的NuGet请非常具体的关于你的问题:

    • 您使用Microsoft.Net.Http版本是什么?
    • 你在.NET版下编译是什么?
  2. 原来你在编译.NET 4.0,这是我想说的一个漏洞,因为该行为是不相同的.NET Fx的4.5 System.Http

您可以修复它由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);