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);