Estoy tratando de obtener contenido de HttpResponseMessage. Debería ser: {"message":"Action '' does not exist!","success":false}
pero no sé cómo sacarlo de HttpResponseMessage.
HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.GetAsync("http://****?action=");
txtBlock.Text = Convert.ToString(response); //wrong!
En este caso, txtBlock tendría valor:
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Vary: Accept-Encoding
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Date: Wed, 10 Apr 2013 20:46:37 GMT
Server: Apache/2.2.16
Server: (Debian)
X-Powered-By: PHP/5.3.3-7+squeeze14
Content-Length: 55
Content-Type: text/html
}
c#
windows-8
windows-store-apps
Ayunarse
fuente
fuente
Content
propiedad en su lugar. Mira el ejemplo aquí . Desplácese hasta el segundo paso.HttpClient
, noHttpWebRequest
/HttpWebResponse
.Creo que el enfoque más fácil es cambiar la última línea a
De esta manera, no necesita introducir ningún lector de flujo y no necesita ningún método de extensión.
fuente
Pruebe esto, puede crear un método de extensión como este:
y luego, simplemente llame al método de extensión:
Espero que esto te ayude ;-)
fuente
await
lugar de.Result
... o use un cliente HTTP síncrono en su lugar, si su código no puede manejar la programación asíncrona. Pero cualquier código moderno debería, de lo contrario, puede ser una señal de que su aplicación está haciendo algo mal.Si desea convertirlo a un tipo específico (por ejemplo, dentro de las pruebas) puede usar el método de extensión ReadAsAsync :
o siguiente para el código síncrono:
Actualización: también hay una opción genérica de ReadAsAsync <> que devuelve una instancia de tipo específica en lugar de una declarada por objeto:
fuente
Por la respuesta de rudivonstaden
pero si no quieres que el método sea asíncrono puedes usar
Wait () es importante, porque estamos haciendo operaciones asincrónicas y debemos esperar a que se complete la tarea antes de continuar.
fuente
.Result
algo diferente ?httpContent.ReadAsStringAsync().Result
.Result
bloquearía la ejecución del hilo en esa línea ... donde comotxtBlock.Text.Wait()
bloques en la llamada wait () ... así que estás en lo cierto, básicamente, no hay diferencia. Pero sospechotxtBlock.Text.Wait()
que tomaría un parámetro entero opcional para que la GUI no se cuelgue si laReadAsStringAsync()
llamada anterior nunca regresa. Por ejemplo, lo siguiente se bloquearía por no más de 1 segundotxtBlock.Text.Wait(1000)
La respuesta rápida que sugiero es:
response.Result.Content.ReadAsStringAsync().Result
fuente
Result
tareas. Corre el riesgo de bloquear su aplicación. Use async / await en su lugar.ReadAsStringAsync()
no regresar, así que asegúrate de no llamarlo en tu GUI o hilo de aplicación principal.Creo que la siguiente imagen ayuda a aquellos que necesitan venir
T
como el tipo de retorno.fuente
Puedes usar el
GetStringAsync
método:fuente