c# - C#HttpWebRequest的错误处理

标签 c# error-handling exception-handling httpwebrequest

我是编程新手。我需要将HttpWebRequest转换为Api的异常处理。下面是我的代码,之前我没有做过错误处理,因此,将提供一个有关如何完成此操作的示例。

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

最佳答案

1)在您的应用程序中创建一个名为“ExceptionTextFile” 的文件夹

2)创建一个单独的类,如下所示以记录异常

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

之后,在您的按钮单击事件内定义try ... catch块并记录如下异常
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);                
  }
}

如果出现任何错误,请转到“ExceptionTextFile” 文件夹,并检查日志。 将在此处记录异常。

如果这解决了您的问题,请尝试并回复我

关于c# - C#HttpWebRequest的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44714490/

相关文章:

c# - C#SQL Server程序集引发错误?

scala 2.8 控制异常 - 有什么意义?

.net - 套接字异常 : No such host is known

c++ - 当一个线程在另一个线程中捕获异常后运行时,进程中止并发出 SIGABRT

c# - 将多个项目添加到同一行的列表框中

c# - 如何获得证书 key 大小

error-handling - 有什么方法可以快速查看所有现有的SSIS包事件处理程序?

c# - 如何创建圆角 Panel 和 Clip bound

c# - 从异步方法将项目添加到列表

python - 在while循环中如何使用while循环