如何处理应用程序启动时发生的ASP.NET应用程序错误以及MVC视图中的传输和显示错误?

Sou*_*ter 11 asp.net error-handling asp.net-mvc

我知道ASP.NET MVC具有错误过滤器属性来处理指定的错误类型.但是,此功能无法捕获应用程序启动时发生的任何错误.因此,我需要在"Application_Error"方法中添加一些代码来处理此错误,如下面的代码所示.

public void Application_Error(object sender, EventArgs e)
{
    // At this point we have information about the error
    var ctx = HttpContext.Current;

    var exception = ctx.Server.GetLastError();

    var errorInfo =
       "<br>Offending URL: " + ctx.Request.Url +
       "<br>Source: " + exception.Source +
       "<br>Message: " + exception.Message +
       "<br>Stack trace: " + exception.StackTrace;

    ctx.Response.Write(errorInfo);

    Server.ClearError();
}
Run Code Online (Sandbox Code Playgroud)

虽然,当正常的应用程序错误发生时,如果在视图页面中发生错误,此代码将正常工作.但是,当应用程序启动时发生错误时,它不起作用,因为请求和响应对象始终为null.

接下来,我尝试通过在自定义错误中设置默认重定向来解决此问题,如下面的代码.

<customErrors mode="On" defaultRedirect="Scripts/ApplicationError.htm"></customErrors>
Run Code Online (Sandbox Code Playgroud)

不幸的是,它不起作用,因为当应用程序收到重定向请求时,它会尝试再次启动应用程序并再次抛出异常.

怎么解决这个问题?或者,您是否有其他想法来处理此错误.

谢谢,

PS.创建此处理程序的主要原因是因为我想在应用程序无法连接到其他服务(如数据库)以在应用程序启动时缓存数据时显示错误.

Dar*_*rov 19

为什么原因RequestResponse对象是null你的内部Application_Error事件,因为Application_Start事件不与任何用户相关联,因此,你不能从它重定向.只有ApplicationServer内置对象可用.引用Session,RequestResponse对象将导致错误.

一种解决方法是使用try/catch并在catch块日志中记录错误并设置一些全局变量,该变量指示在应用程序启动期间出现问题.稍后Application_BeginRequest您可以检查此变量并相应地重定向.

  • 不应该有任何其他要求.如果您的应用程序在初始化时失败,我看不到它如何处理任何请求,如果它处于失败状态.唯一的解决方法是解决问题并重新启动应用程序. (2认同)
  • 我已经不知道有多少帖子帮了我了.谢谢. (2认同)