2017-08-23 19 views
0

當我在C#中發出HTTP請求並讀取響應時,我在響應中收到垃圾數據。我無法弄清楚這個問題。考慮下面的示例代碼片段,其中我調用了Stack Exchange API。C#中的HTTP調用正在返回響應中的垃圾數據

HttpClient client = new HttpClient(); 
client.BaseAddress = new Uri("http://api.stackexchange.com/info"); 
client.DefaultRequestHeaders.Accept.Clear(); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

HttpResponseMessage response = client.GetAsync("?site=stackoverflow").Result; 

if (response.IsSuccessStatusCode) 
{ 
    Console.WriteLine(response.Content.ReadAsStringAsync().Result); 
} 
else 
{ 
    Console.WriteLine("Sorry"); 
} 

下面的截圖顯示了垃圾輸出我收到:

garbage output from HTTP request

我想感謝所有幫助在嘗試調試這個問題,知道我哪裏錯了。

回答

2

問題是數據被壓縮。

要解決它,而不必自己解壓縮數據,指示HttpClient來爲你做它:

HttpClientHandler handler = new HttpClientHandler() 
{ 
    AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate 
}; 

HttpClient client = new HttpClient(handler); 
// ... rest of your code here 

你的代碼,然後給出了這樣的輸出(略):

{"items":[{"new_active_users":13,"total_users":7599686,"badges_per_minute":5.04,"total_badges":24036822,... 

這是也documented

此外,所有API響應都被壓縮。

+0

你是我的救星。 – pratnala