Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取应用程序中的当前模型\u错误_C#_Asp.net Mvc - Fatal编程技术网

C# 获取应用程序中的当前模型\u错误

C# 获取应用程序中的当前模型\u错误,c#,asp.net-mvc,C#,Asp.net Mvc,因此,我有一个全局错误处理程序,每当我在应用程序中遇到错误时,它都会发送一封电子邮件。这非常有效,但是,有些错误(即可怕的“对象引用未设置为对象实例”错误)极难跟踪。我有一个简洁的函数,它可以将序列化模型转换为字符串,这样我就可以看到有问题的代码行正在处理的数据,但我想知道的是,有没有一种方法可以让我在应用程序级错误处理程序中捕获模型?我正在获取我需要的所有其他信息,即url、堆栈跟踪等,只是无法查看当前正在处理的数据。以下是我当前在应用程序中的错误: protected void Ap

因此,我有一个全局错误处理程序,每当我在应用程序中遇到错误时,它都会发送一封电子邮件。这非常有效,但是,有些错误(即可怕的“对象引用未设置为对象实例”错误)极难跟踪。我有一个简洁的函数,它可以将序列化模型转换为字符串,这样我就可以看到有问题的代码行正在处理的数据,但我想知道的是,有没有一种方法可以让我在应用程序级错误处理程序中捕获模型?我正在获取我需要的所有其他信息,即url、堆栈跟踪等,只是无法查看当前正在处理的数据。以下是我当前在应用程序中的错误:

    protected void Application_Error(object sender, EventArgs e)
    {
        Exception exception = Server.GetLastError();
        HttpContext con = HttpContext.Current;
        string serverUrl = "";
        if (con.Request != null)
        {
            serverUrl =  con.Request.Url.ToString();
        }
        var user = "";

        if (GlobalSiteData.CurrentUser != null) user = GlobalSiteData.CurrentUser.Username;
        var ip = (Request.UserHostAddress == null ? "" : Request.UserHostAddress.ToString());
        try {
            Mailers.UserMailer mailer = new Mailers.UserMailer();
            ErrorLog elog = new ErrorLog
            {
                ErrorDate = DateTime.Now,
                InnerException = (exception.InnerException == null ? "" : exception.InnerException.Message),
                Message = exception.Message,
                UserName = user,
                Source = exception.TargetSite.Name,
                SourceUrl = serverUrl,
                StackTrace = exception.StackTrace,
                IPAddr = ip
            };
            mailer.LogEntry(elog).Send();
            ErrorHelpers.LogErrorToFile(elog);
        }
        catch (Exception ex)
        {
            string err = ex.Message;
        }
    }

如果这是一个MVC应用程序,那么我建议您使用错误处理程序。这样,您就可以访问filterContext,其中应该包含您需要的所有内容

在global.asax或AppStart文件夹的FilterConfig.cs中注册以下行

添加(新的CustomHandleErrorAttribute())

创建以下类并添加所需的日志记录。这应该记录MVC框架中发生的所有异常。MVC框架之外的一些条件是这样的,但在大多数情况下,这应该是第一道防线。我将链接另一个使用MVC控制器上可用的OneException方法的选项

   public class CustomHandleErrorAttribute: HandleErrorAttribute {

      public override void OnException(ExceptionContext filterContext)
      {
          if (filterContext.Exception != null)
          {
            // do something
          }

          base.OnException(filterContext);
      }
   }
这里有另一种错误处理方法,也仅适用于MVC