Search code examples
c#error-handlingexceptionhttpwebrequest

c# Error handling for HttpWebRequest


I am fairly new to programming. I require exception handling for my HttpWebRequest to an Api. Below is my code, I haven't done error handling before so just an example of how to accomplish this will be appreciated.

    private void button1_Click(object sender, EventArgs e)
    {
        Class1.PostDevices x = new Class1.PostDevices();

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webAddr);
        request.ContentType = "application/json";
        request.Method = "POST";
        request.Timeout = 5000;

        using (var streamWriter = new StreamWriter(request.GetRequestStream()))
        {
            string jsonstring;
            MemoryStream stream1 = new MemoryStream();
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Class1.PostDevices));

            x.notification = new Class1.Notification();
            x.profile = "dev";
            x.notification.message = "Hello World";

            ser.WriteObject(stream1, x);
            stream1.Position = 0;
            StreamReader sr = new StreamReader(stream1);

            jsonstring = sr.ReadToEnd();
            Debug.WriteLine(JObject.Parse(jsonstring));

            streamWriter.Write(jsonstring);
            streamWriter.Flush();
        }
        HttpWebResponse httpResponse = (HttpWebResponse)request.GetResponse();
        if (httpResponse.StatusCode == HttpStatusCode.OK)
        {
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                string result = streamReader.ReadToEnd();
                Debug.WriteLine(JObject.Parse(result));
                Reponse.PostDevicesReponse MyResult = JsonConvert.DeserializeObject<Reponse.PostDevicesReponse>(result);
            }
        }
    }
}

Solution

  • 1) Create a folder named as "ExceptionTextFile" inside your application

    2) Create a Separate Class like below to log the exception

    using System;
    using System.IO;
    using context = System.Web.HttpContext;
    
    //Define your application namespace here
    namespace YourApplicationNamespace
    {
        public static class ExceptionLogging
        {
            private static String ErrorlineNo, Errormsg, extype, exurl,  ErrorLocation;
    
            public static void SendErrorToText(Exception ex)
            {
                var line = Environment.NewLine + Environment.NewLine;
    
                ErrorlineNo = ex.StackTrace.ToString();
                Errormsg = ex.Message;
                extype = ex.GetType().ToString();
                exurl = context.Current.Request.Url.ToString();
                ErrorLocation = ex.Message.ToString();
                try
                {
                    //Create a folder named as "ExceptionTextFile" inside your application
                    //Text File Path
                    string filepath = context.Current.Server.MapPath("~/ExceptionTextFile/");  
                    if (!Directory.Exists(filepath))
                    {
                        Directory.CreateDirectory(filepath);
                    }
                    //Text File Name
                    filepath = filepath + DateTime.Today.ToString("dd-MM-yy") + ".txt";   
                    if (!File.Exists(filepath))
                    {
                        File.Create(filepath).Dispose();
                    }
                    using (StreamWriter sw = File.AppendText(filepath))
                    {
                        string error = "Log Written Date:" + " " + DateTime.Now.ToString() 
                        + line + "Error Line No :" + " " + ErrorlineNo + line 
                        + "Error Message:" + " " + Errormsg + line + "Exception Type:" + " " 
                        + extype + line + "Error Location :" + " " + ErrorLocation + line 
                        + " Error Page Url:" + " " + exurl + line + line;
                        sw.WriteLine("-----------Exception Details on " + " " + DateTime.Now.ToString() + "-----------------");
                        sw.WriteLine("-------------------------------------------------------------------------------------");
                        sw.WriteLine(line);
                        sw.WriteLine(error);
                        sw.WriteLine("--------------------------------*End*------------------------------------------");
                        sw.WriteLine(line);
                        sw.Flush();
                        sw.Close();
                    }
                }
                catch (Exception e)
                {
                    e.ToString();
                }
            }
        }
    }
    

    After that inside your button click event define try...catch block and log the exception like below

    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            Class1.PostDevices x = new Class1.PostDevices();
    
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webAddr);
            request.ContentType = "application/json";
            request.Method = "POST";
            request.Timeout = 5000;
    
            using (var streamWriter = new StreamWriter(request.GetRequestStream()))
            {
                string jsonstring;
                MemoryStream stream1 = new MemoryStream();
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Class1.PostDevices));
    
                x.notification = new Class1.Notification();
                x.profile = "dev";
                x.notification.message = "Hello World";
    
                ser.WriteObject(stream1, x);
                stream1.Position = 0;
                StreamReader sr = new StreamReader(stream1);
    
                jsonstring = sr.ReadToEnd();
                Debug.WriteLine(JObject.Parse(jsonstring));
    
                streamWriter.Write(jsonstring);
                streamWriter.Flush();
            }
            HttpWebResponse httpResponse = (HttpWebResponse)request.GetResponse();
            if (httpResponse.StatusCode == HttpStatusCode.OK)
            {
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    string result = streamReader.ReadToEnd();
                    Debug.WriteLine(JObject.Parse(result));
                    Reponse.PostDevicesReponse MyResult = JsonConvert.DeserializeObject<Reponse.PostDevicesReponse>(result);
                }
            }
        }
      } 
      catch (Exception e)
      {
         ExceptionLogging.SendErrorToText(e);                
      }
    }
    

    If any error appears go to the "ExceptionTextFile" folder and check the log. The exception would be logged there.

    Try and revert me back if this solves your problem or not