如何使用 C# 在 ASP.Net Web 应用程序中处理 WebException?
how to handle WebException in ASP.Net Web Application using c#?
我正在通过调用第三方 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
}
}
}
}
我正在通过调用第三方 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
}
}
}
}