0

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

1 Answer 1

1

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
            }
        }
    }
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.