it-swarm.com.de

Wo ist HttpContent.ReadAsAsync?

Ich sehe in Tonnen von Beispielen im Web, die das neue HttpClient-Objekt (als Teil der neuen Web-API) verwenden, dass es eine HttpContent.ReadAsAsync<T>-Methode geben sollte. MSDN erwähnt diese Methode jedoch nicht, und IntelliSense findet sie nicht.

Wo ist es hingegangen und wie gehe ich damit um?

215
David Pfeffer

Anscheinend handelt es sich um eine Erweiterungsmethode (in System.Net.Http.Formatting):

HttpContentExtensions-Klasse

Update:

PM> Installationspaket Microsoft.AspNet.WebApi.Client

Gemäß der Paketseite System.Net.Http.Formatting NuGet ist das System.Net.Http.Formatting-Paket nun ein veraltetes Element und kann stattdessen im Microsoft.AspNet.WebApi.Client-Paket gefunden werden, das auf NuGet hier verfügbar ist.

348
J...

Ich habe das gleiche Problem, also bekomme ich einfach einen JSON-String und deserialisiert in meine Klasse:

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

Wenn Sie Newtonsoft.Json bereits verwenden und Microsoft.AspNet.WebApi.Client nicht installieren möchten:

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

Klicken Sie einfach mit der rechten Maustaste in Ihr Projekt. Gehen Sie zur Verwaltung von NuGet-Paketen nach Microsoft.AspNet.WebApi.Client und installieren Sie es. Sie haben Zugriff auf die Erweiterungsmethode.

Nachdem Sie dieses Problem einige Male getroffen und eine Reihe von Vorschlägen befolgt haben, fügen Sie nach der Installation des NuGet Microsoft.AspNet.WebApi.Client manuell eine Referenz aus dem Paketordner in der Projektmappe hinzu: 

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

Fügen Sie dem NuGet System.Net.Http.Formatting.dll keine älteren Verweise hinzu

0
Tom John

Sie können Erweiterungsmethode schreiben:

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