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)状态代码
答案 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);