ไม่พบวิธีใช้ HttpContent


186

ฉันพยายามใช้HttpContent:

HttpContent myContent = HttpContent.Create(SOME_JSON);

... แต่ฉันไม่มีโชคในการค้นหา DLL ที่ระบุไว้

ก่อนอื่นฉันพยายามเพิ่มการอ้างอิงถึงMicrosoft.Httpด้วยเช่นกันSystem.Netแต่ไม่ได้อยู่ในรายการ ฉันพยายามเพิ่มการอ้างอิงถึงSystem.Net.Httpแต่HttpContentคลาสไม่พร้อมใช้งาน

ดังนั้นใครสามารถบอกฉันว่าฉันสามารถหาHttpContentชั้นเรียนได้ที่ไหน

คำตอบ:


-7

คลาสถูกแสดงรายการว่ามีอยู่ในSystem.Net.Httpแอสเซมบลี โปรดทราบว่าคลาสนี้เป็นสิ่งใหม่สำหรับ. NET 4.5 ดังนั้นคุณต้องใช้ BCL เวอร์ชันนั้น


2
มันยังมีอยู่สำหรับ. NET 4 ผ่านทาง Microsoft.NET.Http แพ็คเกจจาก NuGet
Panagiotis Kanavos

121
เกลียดที่จะจู้จี้จุกจิก แต่ได้รับคำถามนี่ไม่ใช่คำตอบของการแข่งขัน? แน่นอนว่า System.Net.Http มี HttpContent แต่ HttpContent ไม่มีวิธีการสร้าง คุณจะต้องใช้หนึ่งในคลาสที่ได้รับมา ( pfelix.wordpress.com/2012/01/16/… ) เช่น StringContent เช่น StringContent ใหม่ (SOME_JSON)
6footunder

13
@ 6footunder นั่นไม่จู้จี้เลยคำตอบนี้ไม่ถูกต้อง
Aran Mulholland

คุณสามารถดูคำตอบของ Youngjae ด้านล่างสำหรับตัวอย่างที่เหมาะสม: stackoverflow.com/a/24474664/21539
Zain Rizvi

8
คำตอบนี้ไม่อยู่เจตนาของ OP ของเดิมคำถามซึ่งจากการอ่านอย่างระมัดระวังของฉันถามเท่านั้นที่HttpContentสามารถพบได้ในชั้นเรียน (นอกจากนี้ทราบว่า OP ได้รับการยอมรับคำตอบนี้.) มันเกิดขึ้นเพียงเพื่อว่า OP มีสองปัญหา (พยายามที่จะสร้างตัวอย่างของHttpClient) ที่อาจไม่ได้เป็นที่เห็นได้ชัดในการ OP จนกระทั่งหลังจากปัญหาการอ้างอิง DLL ที่ได้รับการแก้ไข คำตอบบางส่วนอยู่ที่นี่ว่าปัญหาที่สองและหลายคนพบว่าคำตอบเหล่านั้นมีประโยชน์ ในที่สุดฉันได้แก้ไขคำถาม (ตามข้อความต้นฉบับของ OP) เพื่อชี้แจง
DavidRR

374

แค่ใช้ ...

var stringContent = new StringContent(jObject.ToString());
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

หรือ,

var stringContent = new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

กล่าวว่าพารามิเตอร์เนื้อหาจำเป็นต้องเป็น IHttpContent ไม่ใช่ StringContent เมื่อฉันส่งไปยังอินเทอร์เฟซก็มีความสุขแม้ว่า
micahhoover

3
ลงเอยด้วยการใช้ HttpStringContent ฉันไม่สามารถใช้คลาส StringContent ได้เนื่องจาก PostAsync (หรือ PutAsync ในกรณีของฉัน) ไม่ยอมรับ StringContent แม้ว่าคุณจะส่งไปยังวัตถุ IHttpContent
micahhoover

4
StringContent ใช้งานได้กับ PostAsync แต่ถ้าคุณต้องการหรือต้องการใช้ HttpContent คุณสามารถทำได้เช่นนี้: HttpContent content = new StringContent (jsonString);
Chris Koester

ฉันเห็นคำตอบนี้ต่อสิ่งที่ดูเหมือนจะเป็นปัญหาที่คล้ายกันกับฉันอย่างไรก็ตามเมื่อฉันดีบั๊กผ่าน API ทั้งสองของฉันฉันจะได้รับ PostAsync ("เส้นทาง", StringContent) เพื่อเริ่มทำงาน แต่เมื่อเข้าสู่ API อื่นฉันไม่เห็น มีร่างกายที่จะแยกวิเคราะห์และใช้งานและเมื่อกลับมาฉันได้รับ 500 ... ฉันกำลังสูญเสียตามที่ปรากฏว่าฉันกำลังทำเช่นนี้ ความแตกต่างเพียงอย่างเดียวคือฉันไม่ทำให้วัตถุเป็นอนุกรมเนื่องจากมันได้รับการทำให้เป็นอนุกรมแล้วเมื่อฉันได้รับมันใน API ตัวแรกและมันเป็น passthrough อย่างง่าย
Slagmoth

นี่ควรเป็นคำตอบ: /
DanielV

148

หากต้องการแสดงความคิดเห็นของ 6 ฟุตเดอร์และเปลี่ยนเป็นคำตอบHttpContentเป็นนามธรรมดังนั้นคุณต้องใช้คลาสที่ได้รับมา

ป้อนคำอธิบายรูปภาพที่นี่


5
ดูเหมือนว่าเขาใช้ฟีเจอร์ "Class Diagram" ของ Visual Studio (คลิกขวาที่โครงการของคุณเพิ่ม Item, Class Diagram จากนั้นคุณสามารถผ่าน Solution Explorer และขยายการอ้างอิงเพื่อรับไดอะแกรมของไลบรารีที่คุณอ้างอิง) docs.microsoft.com/en -us / visualstudio / ide / …
Arin

77

สำหรับ JSON Post:

var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

Non-JSON:

var stringContent = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("field1", "value1"),
    new KeyValuePair<string, string>("field2", "value2"),
});
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

https://blog.pedrofelix.org/2012/01/16/the-new-system-net-http-classes-message-content/


ฉันกำลังพยายามใช้ตัวอย่าง "non-json" ของคุณฉันควรอ่านข้อมูลเกี่ยวกับจุดสิ้นสุดการรับอย่างไร
โจ

เนื้อหา var = รอการตอบสนองContent.ReadAsStringAsync ();
Felipe Deveza

6

ในขณะที่รุ่นสุดท้ายของ HttpContent และ System.Net.Http namespace ทั้งหมดจะมาพร้อมกับ. NET 4.5 คุณสามารถใช้รุ่น NET 4 ได้โดยการเพิ่มแพ็คเกจMicrosoft.Net.Httpจาก NuGet


0

ฉันค่อนข้างแน่ใจว่ารหัสไม่ได้ใช้คลาส System.Net.Http.HttpContent แต่แทนที่จะเป็น Microsoft.Http.HttpContent Microsoft.Http เป็นชุดเริ่มต้น WCF REST ซึ่งไม่เคยทำให้มันออกมาแสดงตัวอย่างก่อนที่จะถูกวางไว้ใน. NET Framework คุณยังสามารถค้นหาได้ที่นี่: http://aspnet.codeplex.com/releases/view/24644

ฉันจะไม่แนะนำการอ้างอิงรหัสใหม่กับมัน


0

System.Net.Httpnamespace (ที่HttpContentชั้นอยู่) เป็นใหม่สุทธิ 4.5ที่คุณกำลังใช้ VS2012 RC?

มิฉะนั้นคุณจะไม่สามารถเข้าถึงสิ่งนี้ได้

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