Як отримати відповідь json за допомогою system.net.webrequest в C #?


80

Мені потрібно отримати дані JSON із зовнішнього домену. Я використовував веб-запит, щоб отримати відповідь із веб-сайту. Ось код:

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

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

Хто-небудь знає, чому я не можу отримати дані json?


хтось знає, чому я не можу отримати дані JSON?
h3n

6
Вам потрібно using (var response = request.GetResponse()){ ... }. Може не вирішити проблему, але економить витік ресурсів.
Джон Сондерс,

Відповіді:


67

Вам потрібно чітко запитати тип вмісту.

Додайте цей рядок:

 request.ContentType = "application/json; charset=utf-8";
У відповідному місці


Чи можна передати параметр із цим запитом ??
Jidheesh Rajan

7
Тип вмісту запиту описує тип тіла запиту. Він використовується для повідомлення серверу, в якому форматі дані надсилаються на сервер. Це не має нічого спільного з типом відповіді на вміст. Клієнт може попросити відповісти конкретними типами за допомогою Acceptзаголовка, але сервер може проігнорувати це з інших причин.
temoto


Я знаю, що це стара відповідь, але для повноти я хотів відповісти на @SHEKHARSHETE: ви можете використовувати щось на зразок чудового NewtonSoft JSON.Net, який зробить все за вас, і я рекомендую прочитати корисні посібники для тренування, як це зробити тут: newtonsoft.com/json
Тахір Халід

73

Деякі API хочуть, щоб ви вказали відповідний заголовок "Прийняти" у запиті, щоб отримати бажаний тип відповіді.

Наприклад, якщо API може повертати дані у XML та JSON, і ви хочете отримати результат JSON, вам потрібно буде встановити для HttpWebRequest.Acceptвластивості "application / json" .

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

1
Чи можна передати параметр із цим ??
Jidheesh Rajan

Можливо, ви можете спробувати додати свої параметри до requestUriIe localhost / api / product / 123
DmitryBoyko

@JidheeshRajan Дивіться це питання / відповідь про те , як додати параметри в WebRequest stackoverflow.com/questions/3279888 / ...
Martin Buberl

1
Додавання лише request.ContentType = "application / json; мені цього було недостатньо, тому я думаю, що ваше рішення є правильним.
Кампіньо

Цю відповідь слід прийняти, оскільки поточна прийнята відповідь є неправильною. Ще один приклад невикористання "Прийняти", коли це доречно ...
Arkaine55
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.