Làm cách nào để nhận được phản hồi json bằng system.net.webrequest trong c #?


80

Tôi cần lấy dữ liệu json từ miền bên ngoài. Tôi đã sử dụng webrequest để nhận phản hồi từ một trang web. Đây là mã:

var request = WebRequest.Create(url);
string text;
var response = (HttpWebResponse) request.GetResponse();

using (var sr = new StreamReader(response.GetResponseStream()))
{
    text = sr.ReadToEnd();
}

Có ai biết tại sao tôi không thể lấy dữ liệu json không?


có ai biết tại sao tôi không thể lấy dữ liệu json không?
h3n

6
Bạn cần using (var response = request.GetResponse()){ ... }. Có thể không giải quyết vấn đề nhưng tiết kiệm tài nguyên bị rò rỉ.
John Saunders

Câu trả lời:


67

Bạn cần yêu cầu rõ ràng loại nội dung.

Thêm dòng này:

 request.ContentType = "application/json; charset=utf-8";
Tại nơi thích hợp


Có thể truyền tham số với yêu cầu này không ??
Jidheesh Rajan

7
Yêu cầu Loại nội dung mô tả loại nội dung yêu cầu. Nó được sử dụng để cho máy chủ biết dữ liệu đang được gửi đến máy chủ ở định dạng nào. Nó không liên quan gì đến loại nội dung phản hồi. Máy khách có thể yêu cầu trả lời bằng các kiểu cụ thể bằng cách sử dụng Accepttiêu đề, nhưng máy chủ có thể bỏ qua nó vì những lý do khác.
temoto


Tôi biết đây là một câu trả lời cũ nhưng để hoàn chỉnh, tôi muốn trả lời @SHEKHARSHETE: bạn có thể sử dụng một thứ gì đó như NewtonSoft JSON.Net xuất sắc sẽ thực hiện công việc này cho bạn và tôi khuyên bạn nên đọc các hướng dẫn hữu ích để tìm ra cách thực hiện việc này tại đây: newtonsoft.com/json
Tahir Khalid

73

Một số API muốn bạn cung cấp tiêu đề "Chấp nhận" thích hợp trong yêu cầu để nhận loại phản hồi mong muốn.

Ví dụ: nếu một API có thể trả về dữ liệu trong XML và JSON và bạn muốn có kết quả JSON, bạn sẽ cần đặt thuộc HttpWebRequest.Accepttính thành "application / json" .

HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(requestUri);
httpWebRequest.Method = WebRequestMethods.Http.Get;
httpWebRequest.Accept = "application/json";

1
Có thể truyền tham số với cái này không ??
Jidheesh Rajan

Có lẽ bạn có thể thử thêm các thông số của bạn để requestUriIe localhost / api / product / 123
DmitryBoyko

@JidheeshRajan Xem câu hỏi / câu trả lời này để biết cách thêm thông số vào WebRequest stackoverflow.com/questions/3279888/…
Martin Buberl

1
Thêm chỉ request.ContentType = "application / json; không đủ cho tôi vì vậy tôi nghĩ rằng giải pháp của bạn là điều đúng.
Campinho

Câu trả lời này nên được chấp nhận vì câu trả lời được chấp nhận hiện tại là không đúng. Một ví dụ khác của việc không sử dụng "Chấp nhận" khi cần thiết ...
Arkaine55
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.