API национальной метеорологической службы Внутренняя ошибка сервера

Я продолжаю получать ошибку 500 при попытке получить данные с помощью их нового API, даже когда я включаю строку 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 protected])";

// 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 Национальной службы погоды. Любая помощь приветствуется!


person q t    schedule 06.12.2017    source источник


Ответы (2)


Предоставленная вами документация дает вам ответ:

Согласование содержания

API будет использовать заголовки Accept для изменения возвращаемого ответа. См. Вкладку FAQ для получения дополнительной информации. Параметры включают: версию API, по умолчанию - самый старый Формат ответа, по умолчанию в спецификациях. Примером заголовка Accept будет Accept: application / vnd.noaa.dwml + xml; version = 1

Добавлять:

request.Headers.Add("Accept", "application/vnd.noaa.dwml+json;version=1");, и вы получите ответ в формате JSON.

person Daniel Mann    schedule 06.12.2017

Ошибка 500 - это внутренняя ошибка сервера - это означает, что сервер знает, что он ошибся, и записал ее.

Поскольку ваш метод получения данных работает для другого API, наиболее вероятно, что NWS API намеренно отказывается от службы. Возможно, ему не нравится введенная вами строка электронной почты или так далее и тому подобное.

Когда дело доходит до сторонних API, подобных этому, лучше всего (1) обратиться к руководству, если оно существует (например, «RTFM»), или (2) немного поэкспериментировать и попробовать разные вещи, пока не найдете что-то, что работает.

Например, я обнаружил, что многим службам, включая API-интерфейсы, не нравится один из моих адресов электронной почты в формате [email protected], и они отказываются от обслуживания. Только экспериментируя, я смог понять это.

person rlb.usa    schedule 06.12.2017
comment
Или 3) свяжитесь с ними и сообщите им, что их API выдает ошибку. - person mason; 07.12.2017
comment
@mason Верно, возможно, но вряд ли получит помощь - person rlb.usa; 07.12.2017