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
为什么原因Request和Response对象是null你的内部Application_Error事件,因为Application_Start事件不与任何用户相关联,因此,你不能从它重定向.只有Application和Server内置对象可用.引用Session,Request或Response对象将导致错误.
一种解决方法是使用try/catch并在catch块日志中记录错误并设置一些全局变量,该变量指示在应用程序启动期间出现问题.稍后Application_BeginRequest您可以检查此变量并相应地重定向.
| 归档时间: |
|
| 查看次数: |
8868 次 |
| 最近记录: |