【问题标题】:How to get json response using system.net.webrequest in c#?如何在 c# 中使用 system.net.webrequest 获取 json 响应?
【发布时间】:2010-01-21 10:09:06
【问题描述】:

我需要从外部域获取 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 数据?
  • 你需要using (var response = request.GetResponse()){ ... }。可能不能解决问题,但可以节省资源泄漏。

标签: c# .net json webrequest


【解决方案1】:

某些 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";

【讨论】:

  • 这个可以传参数吗??
  • 也许您可以尝试将参数添加到requestUri 即本地主机/api/product/123
  • @JidheeshRajan 请参阅此问题/答案以了解如何将参数添加到 WebRequest stackoverflow.com/questions/3279888/…
  • 仅添加 request.ContentType = "application/json; 对我来说还不够,所以我认为您的解决方案是正确的。
  • 这个答案应该被接受,因为当前接受的答案不正确。另一个在适当时不使用“接受”的例子......
【解决方案2】:

您需要明确询问内容类型。

添加这一行:

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

【讨论】:

  • 这个请求可以传参数吗??
  • Request Content-Type 描述请求正文的类型。它用于告诉服务器以什么格式将数据发送到服务器。它与响应的内容类型无关。客户端可能会要求使用 Accept 标头回复特定类型,但服务器可能会因其他原因忽略它。
  • 是的,Jidheesh,看到这个stackoverflow.com/questions/10263082/…
  • 我知道这是一个旧答案,但为了完整起见,想回复@SHEKHARSHETE:您可以使用优秀的 NewtonSoft JSON.Net 之类的东西,它会为您完成工作,我建议您阅读有用的指南在这里锻炼如何做到这一点:newtonsoft.com/json
猜你喜欢
  • 2015-11-16
  • 2016-11-03
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
相关资源
最近更新 更多