调用外部API时,Blazor应用程序的访问权限被禁止(403)(在PostMan中运行良好)

时间:2019-05-04 21:58:27

标签: outlook-restapi blazor asp.net-core-3.0

Visual Studio 2019,.NET 3.0预览版,创建了一个出色的应用程序。试图从https://api.weather.gov/gridpoints/ALY/59,14/forecast获取天气数据。 我在C#中使用HttpClient。这是被禁止的(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;
        }

我期望来自https://api.weather.gov/gridpoints/ALY/59,14/forecast的JSON数据

相反,我正在获取禁止(403)状态代码

1 个答案:

答案 0 :(得分:2)

您的问题与Blazor无关,但是weather.gov在任何HTTP请求中都需要User-Agent标头。

访问weather.gov上的资源的应用程序现在需要在任何HTTP请求中提供User-Agent标头。没有用户代理的请求将自动被阻止。由于少数客户使用的资源远远超出大多数人认为合理的资源,因此我们实施了此使用政策。

使用类似这样的内容:

 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);