2012-06-07 166 views
36

我有一個正常工作的web請求,但它只是返回狀態OK,但我需要我要求它返回的對象。我不知道如何獲得我要求的json值。我是使用對象HttpClient的新手,有沒有一個屬性我錯過了?我真的需要返回的對象。感謝您的任何幫助從http請求接收json數據

撥打電話 - 正常運行返回狀態確定。

HttpClient client = new HttpClient(); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
var responseMsg = client.GetAsync(string.Format("http://localhost:5057/api/Photo?)).Result; 

該API獲取方法

//Cut out alot of code but you get the idea 
public string Get() 
{ 
    return JsonConvert.SerializeObject(returnedPhoto); 
} 
+0

你問如何獲得響應的內容使用.NET 4.5的HttpClient類時? –

回答

64

如果你指的是在System.Net.HttpClient .NET 4.5,你可以得到使用HttpResponseMessage.Content屬性爲HttpContent由GetAsync返回的內容 - 派生對象。然後可以使用HttpContent.ReadAsStringAsync方法將內容讀取到字符串中,或​​者使用ReadAsStreamAsync方法將其作爲流讀取。

HttpClient類文檔包括下面的例子:

HttpClient client = new HttpClient(); 
    HttpResponseMessage response = await client.GetAsync("http://www.contoso.com/"); 
    response.EnsureSuccessStatusCode(); 
    string responseBody = await response.Content.ReadAsStringAsync(); 
+3

沒有測試過,但EnsureSuccessStatusCode的文檔說「如果內容不爲空,這個方法也會調用Dispose來釋放託管和非託管資源。」所以你可能希望先閱讀這些內容。 http://msdn.microsoft.com/en-us/library/system.net.http.httpresponsemessage.ensuresuccessstatuscode(v=vs.110).aspx –

+3

沒有理由。正如Reflector所證明的那樣,如果狀態代碼不成功,在拋出異常之前,EnsureSuccessStatusCode將僅處置。還有另一種情況是文檔文本有些混亂。 –

+0

爲什麼不只是'client.GetStringAsync(...)'?那是不是2012年。他們都會拋出一個例外,如果響應不是'200'的權利? –