为什么要在global.asax中注册HandleError

时间:2012-12-15 13:42:31

标签: asp.net-mvc-3

创建新的MVC3项目时,[HandleError]属性默认在GLobal.asax中注册为GlobalFilter。但是,如果我对它进行评论并执行以下(启用自定义错误模式),它仍然有效。我确实看到ErrorView与ErrorInfo模型填充。那么在Global.asax中注册HandleError需要什么?

  [HandleError(ExceptionType = typeof(NullReferenceException),View = "ErrorView")]
        public ActionResult Index()
        {
            throw new NullReferenceException();
            return View();
        }

1 个答案:

答案 0 :(得分:0)

即设置默认的MVC异常处理策略。当出现未处理的异常时,它将呈现/Views/Shared/Error.cshtml视图,而无需在每个控制器或操作上显式添加HandleError属性。

然后,您可以向控制器和/或操作添加更多特定的HandleError属性,这样您可以显示另一个错误视图而不是默认视图,或处理更具体的异常类型。

要使HandleError过滤器正常工作(全局或非全局),您只需要确保在web.config中启用了自定义错误,如<customErrors mode="On" />中所示(默认为RemoteOnly,因此在开发期间他们赢了“被执行”

这很好地解释了(按照一个例子)here