2012-06-07 13 views
36

Ho una richiesta Web che funziona correttamente, ma sta solo restituendo lo stato OK, ma ho bisogno dell'oggetto che sto chiedendo di restituire. Non sono sicuro di come ottenere il valore json che sto richiedendo. Sono nuovo nell'usare l'oggetto HttpClient, c'è una proprietà che mi manca? Ho davvero bisogno dell'oggetto che ritorna. Grazie per qualsiasi aiutoRicezione di dati json indietro dalla richiesta http

Effettuare la chiamata - funziona bene restituisce lo stato OK.

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

l'API ottenere metodo

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

Stai chiedendo come ottenere il contenuto della risposta quando si utilizza la classe .NET 4.5 HttpClient? –

risposta

64

Se lei si riferisce alla System.Net.HttpClient in .NET 4.5, è possibile ottenere il contenuto restituito da GetAsync utilizzando la proprietà HttpResponseMessage.Content come HttpContent - oggetto derivato. È quindi possibile leggere il contenuto in una stringa utilizzando il metodo HttpContent.ReadAsStringAsync o come flusso utilizzando il metodo ReadAsStreamAsync.

Il HttpClient documentazione relativa alla classe include questo esempio:

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

Non sono stati testati, ma la documentazione di EnsureSuccessStatusCode dice "Se il contenuto non è null, questo metodo chiamerà anche Dispose per liberare risorse gestite e non gestite." quindi potresti voler leggere prima il contenuto. http://msdn.microsoft.com/en-us/library/system.net.http.httpresponsemessage.ensuresuccessstatuscode(v=vs.110).aspx –

+3

Nessun motivo. Come evidenziato da Reflector, il valore garantito di AssicurazioneStatoCode verrà risolto SOLO se il codice di stato non ha esito positivo, giusto prima di generare un'eccezione. Ancora un altro caso in cui il testo della documentazione è leggermente confuso. –

+0

Perché non solo 'client.GetStringAsync (...)'? Non è successo nel 2012. Entrambi hanno lanciato un'eccezione se la risposta non era "200", giusto? –

Problemi correlati