国家气象局 API 内部服务器错误

National Weather Service API Internal server error

尝试使用他们的新 API 获取数据时,我一直收到错误 500,即使我包含他们请求的 UserAgent 字符串也是如此:https://forecast-v3.weather.gov/documentation

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.weather.gov/points/40,-90/forecast/hourly");

request.UserAgent = "WeatherTest/v1.0 (http://www.website.com/; Email@email.com)";

// exception occurs here
using (Stream stream = request.GetResponse().GetResponseStream())
{
    using (StreamReader streamReader = new StreamReader(stream))
    {
        var jsonData = streamReader.ReadToEnd();
    }
}

但是我可以使用相同的url在浏览器上使用端点:https://api.weather.gov/points/40,-90/forecast/hourly

我还使用另一个 API(Weather Underground)测试了此代码并且它有效,但我的老板希望我改用国家气象局 api。任何帮助表示赞赏!

错误 500 是内部服务器错误 - 这意味着服务器知道它出错并记录了它。

由于您检索数据的方法适用于不同的 API,NWS API 很可能是故意悄悄地拒绝该服务。也许它不喜欢您提供的电子邮件字符串,等等。

当谈到像这样的第三方 API 时,您最好的选择是 (1) 遵守手册,如果存在的话(例如 "RTFM")或 (2) 到稍微试验一下,尝试不同的东西,直到找到有用的东西。

例如,我发现许多服务 - 包括 APIs - 不喜欢我的用户名@subdomain.domain.com 格式的电子邮件地址之一,并且会拒绝服务。只有通过实验,我才能弄明白这一点。

您提供的文档给了您答案:

Content Negotiation

The API will use Accept headers to modify the response returned. See the FAQ tab for more information. Parameters include: Version of the API, defaults to the oldest Format of the response, default in specifications An example of the Accept header would be "Accept: application/vnd.noaa.dwml+xml;version=1"

添加:

request.Headers.Add("Accept", "application/vnd.noaa.dwml+json;version=1");,您将收到 JSON 回复。