我有一个ASP.NET MVC 2页面。在错误或异常期间,Global.asax中的Application_Error方法未在IIS7上触发。
**但如果我从VS2010运行网络应用程序(localhost:someport)
,它确实会触发我的代码(C#):
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
string requestedUrl = HttpContext.Current.Request.Url.ToString();
Response.Clear();
// do something
Server.ClearError();
Server.Redirect("Error");
}
我的配置:
<customErrors mode="On" defaultRedirect="~/Error">
</customErrors>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
请帮忙。
答案 0 :(得分:4)
这是因为您的Web配置设置覆盖了默认行为。您需要禁用它(customErrors =“Off”并删除defaultRedirect(或有条件地设置正确的状态代码,这允许未设置的错误进入Application_Error事件)。如果禁用此功能,则可以处理Application_Error中的错误然后事件重定向用户或显示来自此事件的消息。此Web配置设置正在处理错误,只有未处理的错误才会出现此事件。
答案 1 :(得分:1)
还有一件事。
对于在IIS上标记为HandleError属性的类/方法中引发的异常,不会触发Application_Error。
如果您在asp.net开发服务器上运行您的应用程序,它将触发但不适用于真正的IIS。 (我陷入了这个陷阱)。