调用OpenWeatherMap API多次返回404错误,求问题排查
问题分析与解决方案
嘿,我一眼就瞅到你代码里的问题啦!问题出在URL参数的拼接方式上:
你构造的weburl里用了&来分隔参数,但这是HTML里的转义字符,实际发送HTTP请求时,URL里的参数分隔符应该直接用&。当服务器收到带&的请求时,会把它当作参数名的一部分,自然找不到正确的接口端点,所以每次都返回404错误。
修正后的代码
把URL里的&替换成&就可以解决这个问题啦,修正后的代码如下:
string CityName = "Omsk"; string API_KEY = "368e827be4b38db51ff960ca88b5c396"; string weburl = "http://api.openweathermap.org/data/2.5/weather?q=" + CityName + "&mode=xml&APPID=" + API_KEY; // weburl = "http://api.openweathermap.org/data/2.5/forecast?id=524901&APPID=368e827be4b38db51ff960ca88b5c396"; XmlDocument doc = new XmlDocument(); var xml = new WebClient().DownloadString(new Uri(weburl)); doc.LoadXml(xml); foreach(XmlNode node in doc.GetElementsByTagName("*")) { Console.Out.WriteLine(node.Name); }
额外建议
- 可以检查下你的API密钥是否仍然有效,有时候密钥过期或者权限不足也会导致请求失败;
- 城市名
Omsk的拼写是正确的,但如果后续换其他城市,要注意是否符合OpenWeatherMap的命名规范; - 如果你是在较新的.NET版本里开发,推荐使用
HttpClient代替WebClient,它更高效且支持异步操作,能更好地处理网络请求场景。
内容的提问来源于stack exchange,提问作者владимир зайцев




