Không thể tìm thấy cách sử dụng HttpContent


184

Tôi đang cố gắng sử dụng HttpContent:

HttpContent myContent = HttpContent.Create(SOME_JSON);

... nhưng tôi không gặp may mắn khi tìm thấy DLL nơi nó được định nghĩa.

Trước tiên, tôi đã cố gắng thêm tham chiếu đến Microsoft.Httpcũng như System.Net, nhưng không có trong danh sách. Tôi cũng đã thử thêm một tài liệu tham khảo System.Net.Httpnhưng HttpContentlớp học không có sẵn.

Vì vậy, bất cứ ai có thể cho tôi biết nơi tôi có thể tìm thấy HttpContentlớp học?

Câu trả lời:


-7

Các lớp được liệt kê là có mặt trong System.Net.Httphội đồng. Lưu ý rằng lớp này là mới cho .NET 4.5, vì vậy bạn cần sử dụng phiên bản BCL đó.


2
Nó cũng có sẵn cho .NET 4 thông qua gói Microsoft.NET.Http từ NuGet
Panagiotis Kanavos

121
Ghét phải kén chọn nhưng đưa ra câu hỏi, đây không phải là câu trả lời cạnh tranh? Chắc chắn System.Net.Http chứa httpContent. Nhưng HttpContent không sở hữu phương thức Tạo. Bạn sẽ cần sử dụng một trong các lớp dẫn xuất ( pfelix.wordpress.com/2012/01/16/ trên ) như StringContent. Ví dụ: StringContent mới (SOME_JSON)
feetunder

13
@ 6 feetunder Điều đó không kén chọn chút nào, câu trả lời này không đúng.
Aran Mulholland

Bạn có thể xem câu trả lời của Youngjae dưới đây để biết ví dụ thích hợp: stackoverflow.com/a/24474664/21539
Zain Rizvi

8
Câu trả lời này giải quyết mục đích của câu hỏi ban đầu của OP mà từ việc đọc cẩn thận của tôi chỉ hỏi nơi HttpContentcó thể tìm thấy lớp học. (Cũng lưu ý rằng OP đã chấp nhận câu trả lời này.) Điều đó xảy ra khiến OP gặp vấn đề thứ hai (cố gắng xây dựng một thể hiện HttpClient) có khả năng không rõ ràng đối với OP cho đến khi vấn đề tham chiếu DLL được giải quyết. Một số câu trả lời ở đây giải quyết vấn đề thứ hai và nhiều người đã tìm thấy những câu trả lời hữu ích. Cuối cùng, tôi đã chỉnh sửa câu hỏi (dựa trên văn bản gốc của OP) để làm rõ nó.
DavidRR

373

Chỉ dùng...

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

Hoặc là,

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

Nói tham số nội dung cần phải là IHttpContent chứ không phải StringContent. Dù vậy, khi tôi đưa nó lên giao diện, nó rất vui.
micahhoover

3
Đã kết thúc bằng cách sử dụng HttpStringContent. Tôi không thể sử dụng lớp StringContent vì PostAsync (hoặc PutAsync trong trường hợp của tôi) không chấp nhận StringContent ngay cả khi bạn chuyển nó sang đối tượng IHttpContent.
micahhoover

4
StringContent hoạt động với tôi với PostAsync, nhưng nếu bạn muốn hoặc cần sử dụng HttpContent, bạn có thể làm như vậy: HttpContent content = new StringContent (jsonString);
Chris Koester

Tôi liên tục thấy câu trả lời này có vẻ là một vấn đề tương tự với tôi, tuy nhiên khi tôi gỡ lỗi qua cả hai API của mình, tôi nhận được PostAsync ("đường dẫn", StringContent) để kích hoạt nhưng khi nó chạm vào API khác thì tôi không có một cơ thể để phân tích và sử dụng và khi trở về, tôi nhận được 500 ... Tôi cảm thấy hụt hẫng vì có vẻ như tôi đang làm điều đó như thế này. Khác biệt duy nhất là tôi không tuần tự hóa đối tượng vì nó đã được tuần tự hóa khi tôi nhận được nó trong API đầu tiên và đó là một thông qua đơn giản.
Slagmoth

Đây phải là câu trả lời: /
DanielV

147

Để nhận xét của 6 feetunder và biến nó thành một câu trả lời, HttpContentlà trừu tượng, do đó bạn cần sử dụng một trong các lớp dẫn xuất:

nhập mô tả hình ảnh ở đây


5
Có vẻ như anh ấy đã sử dụng tính năng "Biểu đồ lớp" của Visual Studio (Nhấp chuột phải vào dự án của bạn, Thêm mục, Sơ đồ lớp. Sau đó, bạn có thể truy cập Solution Explorer và mở rộng Tài liệu tham khảo để lấy sơ đồ của các thư viện mà bạn tham khảo.) Docs.microsoft.com/en -us / visualstudio / ide /
Bắn

77

Đối với bài viết JSON:

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

Không phải 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-groupes-message-content/


Tôi đang cố gắng sử dụng ví dụ "không phải json" của mình, làm thế nào để đọc dữ liệu ở đầu nhận?
Joe

nội dung var = đang chờ phản hồi.Content.ReadAsStringAsync ();
Felipe Deveza

6

Mặc dù phiên bản cuối cùng của HttpContent và toàn bộ không gian tên System.Net.Http sẽ đi kèm với .NET 4.5, bạn có thể sử dụng phiên bản .NET 4 bằng cách thêm gói Microsoft.Net.Http từ NuGet


0

Tôi khá chắc chắn rằng mã không sử dụng lớp System.Net.Http.HttpContent, mà thay vào đó là Microsoft.Http.HttpContent. Microsoft.Http là Bộ khởi động WCF REST, không bao giờ đưa ra bản xem trước trước khi được đặt trong .NET Framework. Bạn vẫn có thể tìm thấy nó ở đây: http://aspnet.codeplex.com/release/view/24644

Tôi không khuyên bạn nên căn cứ mã mới vào nó.


0

Không System.Net.Httpgian tên (nơi HttpContentlớp cư trú) là mới đối với .Net 4.5 , bạn có đang sử dụng RC VS2012 không?

Nếu không, bạn sẽ không có quyền truy cập này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.