Global.asax Application_Error未在IIS上触发

时间:2011-08-23 05:56:54

标签: c# asp.net-mvc iis-7 global-asax

我有一个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>

请帮忙。

2 个答案:

答案 0 :(得分:4)

这是因为您的Web配置设置覆盖了默认行为。您需要禁用它(customErrors =“Off”并删除defaultRedirect(或有条件地设置正确的状态代码,这允许未设置的错误进入Application_Error事件)。如果禁用此功能,则可以处理Application_Error中的错误然后事件重定向用户或显示来自此事件的消息。此Web配置设置正在处理错误,只有未处理的错误才会出现此事件。

答案 1 :(得分:1)

还有一件事。
对于在IIS上标记为HandleError属性的类/方法中引发的异常,不会触发Application_Error。
如果您在asp.net开发服务器上运行您的应用程序,它将触发但不适用于真正的IIS。 (我陷入了这个陷阱)。