web-dev-qa-db-fra.com

Où se trouve HttpContent.ReadAsAsync?

Je vois dans de nombreux exemples sur le Web utilisant le nouvel objet HttpClient (dans le cadre de la nouvelle API Web) qu'il devrait y avoir une méthode HttpContent.ReadAsAsync<T>. Cependant, MSDN ne mentionne pas cette méthode, ni IntelliSense ne la trouve.

Où est-il allé et comment puis-je le contourner?

215
David Pfeffer

Il semble que ce soit une méthode d'extension (dans System.Net.Http.Formatting):

Classe HttpContentExtensions

Mettre à jour:

PM> paquet d'installation Microsoft.AspNet.WebApi.Client

Selon la page du paquet System.Net.Http.Formatting NuGet, le paquet System.Net.Http.Formatting est maintenant hérité et se trouve plutôt dans le paquet Microsoft.AspNet.WebApi.Client disponible sur NuGet ici .

348
J...

J'ai le même problème, donc j'obtiens simplement une chaîne JSON et la désérialisation dans ma classe:

HttpResponseMessage response = await client.GetAsync("Products");
//get data as Json string 
string data = await response.Content.ReadAsStringAsync();
//use JavaScriptSerializer from System.Web.Script.Serialization
JavaScriptSerializer JSserializer = new JavaScriptSerializer();
//deserialize to your class
products = JSserializer.Deserialize<List<Product>>(data);
62
rosta

Si vous utilisez déjà Newtonsoft.Json et ne souhaitez pas installer Microsoft.AspNet.WebApi.Client:

 var myInstance = JsonConvert.DeserializeObject<MyClass>(
   await response.Content.ReadAsStringAsync());
15
Martin Brandl

Dans votre projet, cliquez avec le bouton droit de la souris et sélectionnez Gérer les packages NuGet pour Microsoft.AspNet.WebApi.Client, installez-le et vous aurez accès à la méthode d'extension.

3

Après avoir appuyé sur celui-ci plusieurs fois et suivi de nombreuses suggestions, si vous ne le trouvez pas disponible après l'installation de NuGet Microsoft.AspNet.WebApi.Client, ajoutez manuellement une référence du dossier des packages dans la solution: 

\Microsoft.AspNet.WebApi.Client.5.2.6\lib\net45\System.Net.Http.Formatting.dll

Et n'entrez pas dans le piège de l'ajout d'anciennes références à System.Net.Http.Formatting.dll.

0
Tom John

Vous pouvez écrire une méthode d'extension:

public static async Task<Tout> ReadAsAsync<Tout>(this System.Net.Http.HttpContent content) {
    return Newtonsoft.Json.JsonConvert.DeserializeObject<Tout>(await content.ReadAsStringAsync());
}
0
Vasya Milovidov