在HttpClient Post请求上接收访问被拒绝

问题描述 投票:1回答:1

我正在学习C#和Web请求,所以我想从一个简单的帖子开始,然后打印出对控制台的响应。

我已经双重检查了chrome和fiddler中的请求,我在那里得到了正确的响应,但是在这个程序中它返回“拒绝访问”。

        static async Task<string> GetWeatherAsync()
        {
            var values = new List<KeyValuePair<string, string>>
            {
                new KeyValuePair<string, string>("User-Agent", "WeatherAhead")
            };

            var content = new FormUrlEncodedContent(values);
            var response = await client.PostAsync("https://api.weather.gov/points/39.7456,-97.0892", content);
            var responseString = await response.Content.ReadAsStringAsync();

            return responseString;
        }

URL是他们在weather.gov的文档中提供的测试,并返回我通过浏览器访问时所期望的json。

感谢您提供的任何帮助或建议!

c#
1个回答
1
投票

为客户端添加这些设置

client.BaseAddress = new Uri("http://api.weather.gov");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("User-Agent", "web api client");

将您的功能更改为此功能

static async Task < string > GetWeatherAsync() {

        client.BaseAddress = new Uri("http://api.weather.gov");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        client.DefaultRequestHeaders.Add("User-Agent", "web api client");

        //var response = await client.GetAsync("https://api.weather.gov/points/39.7456,-97.0892");
        var response = await client.GetAsync("/points/39.7456,-97.0892");
        var responseString = await response.Content.ReadAsStringAsync();

        return responseString;

}
© www.soinside.com 2019 - 2024. All rights reserved.