【问题标题】:HttpWebRequest gives 500 status code but is returning JSON from the API?HttpWebRequest 提供 500 状态代码,但从 API 返回 JSON?
【发布时间】:2017-01-28 00:26:38
【问题描述】:

问题背景:

我正在尝试为我在 Azure 中托管的 Web API 创建一个简单的HttpWebRequest

问题:

如果我通过浏览器或 Postman 等请求工具访问我的 Web API 端点,我将收到没有问题的 JSON 响应。

如果我尝试通过 HttpWebRequest 调用访问同一端点,我会收到 500 致命错误,但我可以在 Try Catch 的响应属性中看到 JSON 响应已返回。

The remote server returned an error: (500) Internal Server Error.

守则:

以下是我对我拥有的 Web API 提出的简单请求。如前所述,在Catch 响应是返回我期望的JSON,如图所示:

{"ResponseMessage":"OK","ResponseContent:[{"kind":"youtube#playlistItem","etag":"\"gMxXHe- ........ etc }]}

请求:

 string url ="http://myapi.azurewebsites.net/api/videos/GetYouTubeVideos";

    try
    {
        HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;

        WebResponse wr = req.GetResponse();
    }
    catch (WebException wex)
    {
        var pageContent = new StreamReader(wex.Response.GetResponseStream())
                              .ReadToEnd();
    }

我很欣赏确定 500 的原因并不是直截了当的,但任何人都可以提供一个原因,我会收到此错误,但仍然从显然抛出异常的服务中收到 JSON

【问题讨论】:

  • 您的 JSON 响应是否有效?您给出的响应无效..可能是因为您只添加了示例数据..第二件事添加您的完整方法代码并向响应消息添加异常!

标签: c# asp.net-web-api httpwebrequest httpwebresponse http-status-code-500


【解决方案1】:

有一些关于WebHeaders的属性你一定要小心!示例代码:

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = "GET";
webRequest.Proxy = webProxy;
webRequest.AllowAutoRedirect = true;
webRequest.Timeout = 20 * 1000;
webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
webRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36";
WebResponse wr = webRequest.GetResponse()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 2013-12-26
    • 2015-08-14
    • 2017-03-18
    • 1970-01-01
    • 2017-04-27
    相关资源
    最近更新 更多