我正在学习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。
感谢您提供的任何帮助或建议!
为客户端添加这些设置
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;
}