使用自定义页面处理IIS6,IIS7,ASP.NET MVC3中的500个错误的权威指南

时间:2011-08-25 23:08:47

标签: asp.net asp.net-mvc asp.net-mvc-3 iis-7

我正在尝试将一个500错误处理页面添加到我的ASP.NET MVC3项目中。

无论是本地访问还是远程访问,我都希望显示自定义错误页面。 我的网站运行在IIS6,IIS7和IIS7.5 Express

我想在以下时间显示:

  • Application_BeginRequest
  • 中抛出异常
  • Application_Error
  • 中抛出异常
  • 网站项目
  • 中的静态构造函数中引发异常
  • Controller中引发异常
  • 视图中抛出异常
  • 几乎任何地方抛出异常。

我无法做到这一点,事实上我根本无法显示任何自定义错误页面。

我的错误页面位于~/Views/Shared/Error.aspx

Global.asax.cs中的我的Application_Error方法只记录抛出的异常。

我的web.config有这个:

<customErrors mode="On" defaultRedirect="~/Views/Shared/Error.aspx" redirectMode="ResponseRewrite">
</customErrors>
...
<system.webServer>
  <httpErrors errorMode="Custom" />
  ...
</system.webServer>

我错过了什么?我需要做些什么来处理这些情况?

2 个答案:

答案 0 :(得分:1)

对于IIS 7+,您只缺少定义使用自定义处理程序处理哪些 httpErrors的部分:

<configuration>
   <system.webServer>
      <httpErrors errorMode="Custom">
         <remove statusCode="500" />
         <error statusCode="500" path="~/Views/Shared/Error.aspx" />
       </httpErrors>
   </system.webServer>
</configuration>

<remove />标记是可选的,具体取决于您的web.config层次结构。)

对于IIS 6及更低版本,您必须通过IIS管理器设置此项,方法是转到相应的“属性”页面“自定义错误”选项卡,然后将相应的HTTPError行编辑为“消息类型:”“URL”和“URL:” “〜/查看/共享/ Error.aspx”。

答案 1 :(得分:0)

最好的方法是找出你的BeginRequest首先抛出异常的原因。这不应该发生。在Application_Error中,一种替代方法是使用GetBaseException,然后只使用异常信息重定向到自定义错误页面。