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

前端之家收集整理的这篇文章主要介绍了如何处理在MVC视图中应用程序启动和传输和显示错误发生的ASP.NET应用程序错误?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道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();
}

虽然,这个代码会正常工作,正常的应用程序错误发生在视图页面中发生的错误.然而,当应用程序启动时发生错误,因为请求和响应对象始终为空,所以不起作用.

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

<customErrors mode="On" defaultRedirect="Scripts/ApplicationError.htm"></customErrors>

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

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

谢谢,

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

解决方法

Application_Error事件中Request和Response对象为null的原因是因为Application_Start事件与任何用户都不相关联,因此您无法从中重定向.只有应用程序和服务器内置的对象可用.引用会话,请求或响应对象将导致错误.

一个解决方法是使用try / catch,并在catch块中记录错误并设置一些全局变量,指示应用程序启动过程中出现问题.后来在Application_BeginRequest你可以检查这个变量并相应地重定向.

猜你在找的asp.Net相关文章