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.