简体   繁体   中英

how to handle WebException in ASP.Net Web Application using c#?

I'm creating my own weather api by calling third party api openweather. I don't know how to handle WebException which occurs when I provide city which doesn't exist as an input, it gives me status code 404 from openweatherapi and I don't know how to handle that error my application always crashes due to unhandled exception

Thank you for helping:D

code on which I'm working

        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();
            }
        } 

Thank you for helping:D

You can check if the remote service returned an error message in the error, like so:

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
            }
        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM