HttpContent.ReadAsAsync nerede?


283

Web'de yeni HttpClientnesneyi (yeni Web API'sinin bir parçası olarak) kullanarak tonlarca örnekte HttpContent.ReadAsAsync<T>yöntem olması gerektiğini görüyorum . Ancak, MSDN bu yöntemden bahsetmez ve IntelliSense bu yöntemi bulmaz.

Nereye gitti ve nasıl çalışıyorum?

Yanıtlar:


436

Bir uzantı yöntemi gibi görünüyor (System.Net.Http.Formatting'de):

HttpContentExtensions Sınıfı

Güncelleme:

PM> kurulum paketi Microsoft.AspNet.WebApi.Client

Göre System.Net.Http.Formatting Nuget paket sayfasında, System.Net.Http.Formattingpaket şimdi mirasıdır ve yerine bulunabilir Microsoft.AspNet.WebApi.Clientgeçerli pakette burada Nuget .


Bu son müşteri Nugets'te kullanımdan kaldırıldı mı? Şimdi bulamıyorum (eskiden).
— georgiosd

İyi olabilirdi. .NET4.5, zaman uyumsuzluk / görevler (bekliyor, vb.) İle ilgili birçok yeni şey eklediğinden, bu uzantılar artık gerekli olmayabilir. Belki buraya bir göz atarım
— J ...

4
@georgiosd Cevabı yeni güncelledim. Bu arada nuget.org/packages/Microsoft.AspNet.WebApi.Client paketine System.Net.Http.Formattingtaşınmış gibi görünüyor .
— Joseph Woodward

1
Öyleyse, orijinal sorudaki yöntemin HttpContent.ReadAsAsync<T>Microsoft.AspNet.WebApi.Client'te olmadığı doğru mu? Önerilen değiştirme nedir?
— Patrick Szalapski

1
@JedatKinports Emin değil. WebAPI.Client paketi .NET 4.5 gerektirir. Eski HttpContentExtensions .NET 4.0
— J

68

Ben de aynı sorunu var, bu yüzden sadece JSON dize almak ve benim sınıftan serisini kaldırmak:

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);

8
Bunun soruyu cevaplamamasının yanı sıra, bu neden oylandı? Buna makul bir alternatif değil ReadAsAsyncmi?
— Jess

7
Kesinlikle! 1!
— Mrchief

7
muhtemelen eklenti yöntemi nereye gitti sorusuna cevap vermediniz. Kendiniz yazmak kötü bir çözüm
— BritishDeveloper

13
Mutlaka kötü bir çözüm değildir, yerelleştirilmiştir ve bu nedenle gelecekteki nuget güncellemelerinde vb. Kırılma olasılığı yoktur.
— rulo

3
Bu, yanıtın bir JSON içerik türüne sahip olduğunu varsayar.
— CodeCaster

30

Zaten kullanıyorsanız Newtonsoft.Jsonve yüklemek istemiyorsanız Microsoft.AspNet.WebApi.Client:

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

9

Genişletme yöntemi yazabilirsiniz:

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

Ben ne kadar sona erdi - 2 satır yöntemi için tüm DLL sürüklemek için gitmeyeceğim.
— Liz


0

NuGet Microsoft.AspNet.WebApi.Client'i yükledikten sonra uygun bulamazsanız, bunu birkaç kez vurup bir dizi öneriyi izledikten sonra, aşağıdaki çözümlere paketler klasöründen referans ekleyin:

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

Ve System.Net.Http.Formatting.dll NuGet'e eski referanslar ekleme tuzağına girmeyin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.