如何在C#中使用system.net.webrequest获取json响应?


80

我需要从外部域获取json数据。我使用webrequest从网站获得响应。这是代码:

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()){ ... }。可能无法解决问题,但可以节省资源泄漏。
约翰·桑德斯

Answers:


67

您需要明确要求内容类型。

添加此行:

 request.ContentType = "application/json; charset=utf-8";
在适当的地方


是否可以通过此请求传递参数?
Jidheesh Rajan

7
请求内容类型描述请求主体的类型。它用于告诉服务器数据以什么格式发送到服务器。它与响应的内容类型无关。客户端可能会要求使用Accept标头以特定类型进行回复,但是服务器可能会由于其他原因而忽略它。
temoto 2014年


我知道这是一个旧答案,但出于完整性的考虑,请回复@SHEKHARSHETE:您可以使用类似NewtonSoft JSON.Net这样的工具为您完成工作,我建议您在此处阅读有关锻炼方法的有用指南:newtonsoft.com/json
塔希尔·哈立德

73

一些API希望您在请求中提供适当的“ Accept”标头,以获取所需的响应类型。

例如,如果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,2014年

@JidheeshRajan有关如何向WebRequest stackoverflow.com/questions/3279888/…
Martin Buberl 2014年

1
是不够的我,所以我认为您的解决方案是正确的;只添加request.ContentType =“应用/ JSON。
Campinho

该答案应被接受,因为当前接受的答案不正确。在适当的时候不使用“接受”的另一个例子……
Arkaine55'6
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.