问题描述
我正在通过调用第三方 api openweather 创建自己的天气 api。我不知道如何处理当我提供不存在的城市作为输入时发生的 WebException,它给我来自 openweatherapi 的状态代码 404,我不知道如何处理该错误我的应用程序总是由于未处理而崩溃异常
感谢您的帮助 :D
我正在处理的代码
public void WeatherDetail(string City)
{
//Assign API KEY which received from OPENWEATHERMAP.ORG
string appId = "*******";
//API path with CITY parameter and other parameters.
string url = string.Format("http://api.openweathermap.org/data/2.5/weather?q={0}&appid={1}",City,appId);
using (WebClient client = new WebClient())
{
string json = "";
try
{
json = client.DownloadString(url);
}
catch (system.net.webexception)
{
// how to handle WebException ?
}
//Converting to OBJECT from JSON string.
Root weatherInfo = (new JavaScriptSerializer()).Deserialize<Root>(json);
//Special viewmodeL design to send only required fields not all fields which received from
Resultviewmodel rslt = new Resultviewmodel();
DateTime aDate = DateTime.Now;
string today = aDate.ToString("yyyy-MM-dd");
rslt.Country = weatherInfo.sys.country;
if(City == "Thane" || City == "thane")
{
rslt.Name = "Thane";
}
else
{
rslt.Name = weatherInfo.name;
}
rslt.Lat = weatherInfo.coord.lat;
rslt.Lon = weatherInfo.coord.lon;
rslt.Description = weatherInfo.weather[0].description;
rslt.Temp = weatherInfo.main.temp;
rslt.WeatherIcon = weatherInfo.weather[0].icon;
rslt.Pressure = weatherInfo.main.pressure;
rslt.Deg = weatherInfo.wind.deg;
rslt.WindSpeed = weatherInfo.wind.speed;
rslt.Main = weatherInfo.weather[0].main;
rslt.WeatherId = weatherInfo.weather[0].id;
rslt.Sunrise = weatherInfo.sys.sunrise;
rslt.Sunset = weatherInfo.sys.sunset;
rslt.Date = today;
rslt.Id = weatherInfo.id;
try
{
con.open();
}
catch (System.Data.sqlClient.sqlException ex)
{
throw ex;
}
cmd = new sqlCommand("insert into CityWeather (lon,lat,name,country,weatherid,main,description,temp,pressure,sunrise,sunset,windspeed,deg,weatherIcon) values (" +
"'" + rslt.Lon + "','" + rslt.Lat + "','" + rslt.Name + "','" + rslt.Country + "','" + rslt.WeatherId + "','" + rslt.Main + "','" + rslt.Description + "','" + rslt.Temp + "','" + rslt.Pressure + "','" + rslt.Sunrise + "','" + rslt.Sunset + "','" + rslt.WindSpeed + "','" + rslt.Deg + "','" + rslt.WeatherIcon + "')",con);
cmd.ExecuteNonQuery();
con.Close();
}
}
感谢您的帮助 :D
解决方法
您可以检查远程服务是否在错误中返回了错误消息,如下所示:
catch (WebException wex)
{
if (wex.Status == WebExceptionStatus.ProtocolError)
{
using (Stream responStream = wex.Response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(responStream))
{
String response = reader.ReadToEnd();
//check response content here,and return an error to your client
}
}
}
}