Приложение Blazor получает Forbidden (403) при вызове внешнего API (который отлично работает в PostMan) - PullRequest
0 голосов
/ 05 мая 2019

Visual Studio 2019, предварительный просмотр .NET 3.0, Создано блестящее приложение. Пытается получить данные о погоде от https://api.weather.gov/gridpoints/ALY/59,14/forecast. Я использую HttpClient в C #. Это становится запрещенным (403) ответ

Пытался добавить политику CORS

private async Task<IWeatherDotGovForecast> RetrieveForecast()
        {
            string url = @"https://api.weather.gov/gridpoints/ALY/59,14/forecast";
            var response = await _httpClient.GetAsync(url);

            if (response != null)
            {
                var jsonString = await response.Content.ReadAsStringAsync();
                return JsonConvert.DeserializeObject<WeatherDotGovForecast>(jsonString);
            }

            //return await _httpClient.GetJsonAsync<WeatherDotGovForecast>
            //  ("https://api.weather.gov/gridpoints/ALY/59,14/forecast");

            return null;
        }

Я ожидал данные JSON от https://api.weather.gov/gridpoints/ALY/59,14/forecast

Вместо этого я получаю Запрещенный (403) код состояния

1 Ответ

2 голосов
/ 05 мая 2019

Ваша проблема не связана с Blazor, но weather.gov требует заголовок User-Agent в любом HTTP-запросе.

Приложения, обращающиеся к ресурсам на weather.gov, теперь должны предоставлять заголовок User-Agent в любом HTTP-запросе. Запросы без агента пользователя автоматически блокируются. Мы внедрили эту политику использования из-за небольшого числа клиентов, использующих ресурсы, намного превышающие то, что большинство сочло бы разумным.

Используйте что-то вроде этого:

 var _httpClient = new HttpClient();
 string url = @"https://api.weather.gov/gridpoints/ALY/59,14/forecast";
 _httpClient.DefaultRequestHeaders.Add("User-Agent", "posterlagerkarte");
 var response = await _httpClient.GetAsync(url);
...