HttpContent.ReadAsAsync อยู่ที่ไหน


283

ฉันเห็นตัวอย่างมากมายบนเว็บโดยใช้HttpClientออบเจ็กต์ใหม่(เป็นส่วนหนึ่งของ Web API ใหม่) ว่าควรมีHttpContent.ReadAsAsync<T>วิธีการ อย่างไรก็ตามMSDNไม่ได้กล่าวถึงวิธีการนี้และ IntelliSense ไม่พบมัน

มันไปไหนและฉันจะแก้ไขได้อย่างไร

คำตอบ:


436

ดูเหมือนว่ามันเป็นวิธีการขยาย (ใน System.Net.Http.Formatting):

คลาส HttpContentExtensions

ปรับปรุง:

PM> การติดตั้งแพ็คเกจ Microsoft.AspNet.WebApi.Client

ตามหน้าSystem.Net.Http.Formattingแพคเกจ NuGet แพคเกSystem.Net.Http.Formattingจตอนนี้เป็นมรดกและสามารถพบได้ในMicrosoft.AspNet.WebApi.Clientแพคเกจที่มีอยู่บนNuGetแทน


สิ่งนี้เลิกใช้แล้วใน Nugets ไคลเอนต์ล่าสุดหรือไม่ หาไม่พบในตอนนี้ (เคยเป็น)
georgiosd

มันอาจเป็นไปได้ .NET4.5 ได้เพิ่มสิ่งใหม่ ๆ มากมายเกี่ยวกับ async / task (รอ ฯลฯ ) ดังนั้นส่วนขยายเหล่านี้อาจไม่จำเป็นอีกต่อไป ฉันอาจจะดูที่นี่ตัวอย่างเช่น: msdn.microsoft.com/en-us/library/

4
@georgiosd ฉันเพิ่งปรับปรุงคำตอบ ในเวลานั้นSystem.Net.Http.Formattingดูเหมือนว่ามันถูกย้ายไปยังแพคเกจnuget.org/packages/Microsoft.AspNet.WebApi.Client
Joseph Woodward

1
ดังนั้นจริงหรือไม่ที่วิธีการในคำถามเดิมHttpContent.ReadAsAsync<T>ไม่ได้อยู่ใน Microsoft.AspNet.WebApi.Client การเปลี่ยนที่แนะนำคืออะไร
Patrick Szalapski

1
@JedatKinports ค่อนข้างแน่ใจว่ามันไม่ แพ็คเกจ WebAPI.Client ต้องการ. NET 4.5 ฉันคิดว่า HttpContent ส่วนขยายเก่ามีไว้สำหรับ. NET 4.0
J ...

68

ฉันมีปัญหาเดียวกันดังนั้นฉันจึงได้รับสตริง JSON และ deserialize ในชั้นเรียนของฉัน:

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
นอกเหนือจากข้อเท็จจริงที่ว่าไม่ได้ตอบคำถามทำไมสิ่งนี้ถึงถูกโหวต? มันเป็นทางเลือกที่สมเหตุสมผลReadAsAsyncใช่ไหม
Jess

7
แน่ใจ! +1!
Mrchief

7
อาจเป็นเพราะคุณไม่ได้ตอบคำถามว่าวิธีส่วนขยายหายไปไหน การเขียนของคุณเองเป็นวิธีแก้ปัญหาที่ไม่ดี
พัฒนาชาวอังกฤษ

13
มันไม่จำเป็นต้องเป็นวิธีแก้ปัญหาที่ไม่ดีมันเป็นภาษาท้องถิ่นและดังนั้นจึงไม่น่าที่จะแตกในการอัพเดท nuget ในอนาคต ฯลฯ ฉันทำเพื่อมัน
ม้วน

3
สิ่งนี้ถือว่า reponse มีประเภทเนื้อหา JSON
CodeCaster

30

หากคุณใช้อยู่แล้วNewtonsoft.Jsonและไม่ต้องการติดตั้งMicrosoft.AspNet.WebApi.Client:

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

9

คุณสามารถเขียนวิธีการขยายได้:

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

มันคือสิ่งที่ฉันทำลงไป - ฉันจะไม่ลาก DLL ทั้งหมดสำหรับวิธี 2 บรรทัด
Liz

5

เพียงคลิกขวาในโครงการของคุณไปจัดการแพคเกจ NuGet ค้นหา Microsoft.AspNet.WebApi.Client ติดตั้งและคุณจะสามารถเข้าถึงวิธีการขยาย


3
ใครที่บ่นเกี่ยวกับอะไร
David Pfeffer

0

ต้องกดปุ่มนี้สองสามครั้งและทำตามคำแนะนำหากคุณไม่พบมันหลังจากติดตั้ง NuGet Microsoft.AspNet.WebApi.Client ด้วยตนเองเพิ่มการอ้างอิงจากโฟลเดอร์แพ็คเกจในการแก้ปัญหาไปที่:

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

และอย่าเข้าไปในกับดักของการเพิ่มการอ้างอิงเก่าไปยัง System.Net.Http.Formatting.dll NuGet

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.