2012-06-07 13 views
36

Tengo una solicitud web que funciona correctamente, pero solo está devolviendo el estado OK, pero necesito el objeto que solicito que me devuelva. No estoy seguro de cómo obtener el valor json que estoy solicitando. Soy nuevo en el uso del objeto HttpClient, ¿hay alguna propiedad que me esté perdiendo? Realmente necesito el objeto que regresa. Gracias por cualquier ayudaRecepción de datos json de la solicitud http

Realizar las llamadas corre bien devuelve el estado 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; 

la API método get

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

¿Estás preguntando cómo conseguir el contenido de la respuesta cuando se utiliza la clase de .NET 4.5 HttpClient? –

Respuesta

64

Si se refiere a la System.Net.HttpClient en .NET 4.5, se puede obtener el contenido devuelto por GetAsync utilizando la propiedad HttpResponseMessage.Content como HttpContent - Objeto derivado Luego puede leer los contenidos en una cadena usando el método HttpContent.ReadAsStringAsync o como una secuencia usando el método ReadAsStreamAsync.

La documentación de la clase HttpClient incluye este ejemplo:

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

No lo he probado, pero la documentación de EnsureSuccessStatusCode dice "Si el contenido no es nulo, este método también llamará a Dispose para liberar recursos administrados y no administrados". por lo que es posible que desee leer el contenido primero. http://msdn.microsoft.com/en-us/library/system.net.http.httpresponsemessage.ensuresuccessstatuscode(v=vs.110).aspx –

+3

No hay razón para esto. Como lo demuestra Reflector, EnsureSuccessStatusCode dispondrá ÚNICAMENTE si el código de estado no es satisfactorio, justo antes de lanzar una excepción. Otro caso donde el texto de la documentación es un poco confuso. –

+0

¿Por qué no simplemente 'client.GetStringAsync (...)'? ¿No fue eso en 2012? Ambos arrojaron una excepción si la respuesta no fue "200" ¿verdad? –

Cuestiones relacionadas