J'essaye d'obtenir le contenu de HttpResponseMessage. Cela devrait être {"message":"Action '' does not exist!","success":false}
:, mais je ne sais pas, comment le sortir de HttpResponseMessage.
HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.GetAsync("http://****?action=");
txtBlock.Text = Convert.ToString(response); //wrong!
Dans ce cas, txtBlock aurait la valeur:
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
}
Content
plutôt d' utiliser la propriété. Regardez l' exemple ici . Faites défiler jusqu'à la deuxième étape.HttpClient
, pasHttpWebRequest
/HttpWebResponse
.Je pense que l'approche la plus simple consiste simplement à changer la dernière ligne en
De cette façon, vous n'avez pas besoin d'introduire de lecteurs de flux et vous n'avez besoin d'aucune méthode d'extension.
la source
Essayez ceci, vous pouvez créer une méthode d'extension comme celle-ci:
puis, appelez simplement la méthode d'extension:
J'espère que cela vous aidera ;-)
la source
await
place de.Result
... ou utiliser un client HTTP synchrone à la place, si votre code ne peut pas gérer la programmation asynchrone. Mais tout code moderne devrait, sinon cela peut être un signe que votre application fait quelque chose de mal.Si vous souhaitez le convertir en un type spécifique (par exemple dans les tests), vous pouvez utiliser la méthode d'extension ReadAsAsync :
ou suivant pour le code synchrone:
Mise à jour: il existe également une option générique de ReadAsAsync <> qui retourne une instance de type spécifique au lieu d'une instance déclarée par objet:
la source
Par la réponse de rudivonstaden
mais si vous ne voulez pas rendre la méthode asynchrone, vous pouvez utiliser
Wait () c'est important, car nous faisons des opérations asynchrones et nous devons attendre que la tâche se termine avant de continuer.
la source
.Result
un autre ?,httpContent.ReadAsStringAsync().Result
.Result
bloquerait l'exécution du thread sur cette ligne ... alors que destxtBlock.Text.Wait()
blocs lors de l'appel wait () ... vous avez donc raison de dire qu'il n'y a fondamentalement aucune différence. Mais je soupçonnetxtBlock.Text.Wait()
que prendrait un paramètre entier facultatif pour que l'interface graphique ne se bloque pas si l'ReadAsStringAsync()
appel précédent ne revient jamais. Par exemple, ce qui suit ne bloquera pas plus d'une secondetxtBlock.Text.Wait(1000)
La réponse rapide que je suggère est:
response.Result.Content.ReadAsStringAsync().Result
la source
Result
à des tâches. Vous risquez de bloquer votre application. Utilisez plutôt async / await.ReadAsStringAsync()
ne pas revenir, alors assurez-vous de ne pas l'appeler sur votre interface graphique ou le thread principal de l'application.Je pense que l'image suivante aide pour ceux qui doivent venir
T
comme type de retour.la source
Vous pouvez utiliser la
GetStringAsync
méthode:la source