使用C#从OpenWeatherMap获取天气时出现错误401

时间:2019-04-04 11:50:56

标签: c# apache asp.net-web-api

下面是我的Web API代码。当我在API的URL中传递城市信息时,我得到了System.Net.WebException(远程服务器返回错误:(401)未经授权。)。

[HttpGet]
public string GetWeatherReport(string cityName)
{
    string json = string.Empty;
    string createRequest = "http://api.openweathermap.org/data/2.5/weather?q=" + cityName + "&mode=xml&units=metric&appid=APIKEY";

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(createRequest);
    request.UseDefaultCredentials = true;
    request.PreAuthenticate = true;
    request.Credentials = CredentialCache.DefaultCredentials;
    try
    {
        using (HttpWebResponse httpWebResponse = (HttpWebResponse)request.GetResponse() as HttpWebResponse)
        {
            System.IO.StreamReader streamReader = new System.IO.StreamReader(httpWebResponse.GetResponseStream());
            JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings();
            jsonSerializerSettings.MissingMemberHandling = MissingMemberHandling.Ignore;
            string data  = streamReader.ReadToEnd();

            XmlDocument doc = new XmlDocument();
            doc.LoadXml(data);
            json = JsonConvert.SerializeXmlNode(doc).Replace("@", "");
        }
    }
    catch (Exception ex)
    {
        throw;
    }
    return json;
}

1 个答案:

答案 0 :(得分:0)

根据有关错误401的OpenWeatherMaps常见问题解答,他们有以下说法:


在以下情况下,您会收到错误401:

  • 您未在API请求中指定API密钥。
  • 您在API请求中使用了错误的API密钥。请检查您个人帐户中正确的API密钥。
  • 您有免费订阅,并尝试访问我们的付费服务(例如16天/每日API,任何历史天气数据,天气地图2.0等)。请在您的个人帐户中检查关税,并注意我们的价格和条件。

从2015年10月9日开始,我们的API需要有效的APPID才能访问。请注意,这不是并不意味着我们的API现在仅订阅-请花一分钟时间注册一个 FREE 帐户以获取密钥。

对于FOSS开发人员::我们欢迎免费和开源的软件,并愿意为您提供帮助。如果要在免费软件应用程序中使用OWM数据,请注册一个API密钥并提交一张票证,描述您的应用程序和已注册的API密钥。如果在开放源代码应用程序中使用过,OWM将检查您的密钥请求升降机访问限制。


从外观上看,您正在提供一个API密钥,并且您尝试获取的特定数据是免费提供的一部分,我将按照上面的建议再次检查您的API密钥。

相关问题