Asp.net mvc 3 为什么要在global.asax中注册HandleError

Asp.net mvc 3 为什么要在global.asax中注册HandleError,asp.net-mvc-3,Asp.net Mvc 3,创建新的MVC3项目时,[HandleError]属性默认注册为GLobal.asax中的GlobalFilter。但是,如果我对它进行注释并执行以下操作(启用自定义错误模式),它仍然可以工作。我确实看到ErrorView填充了ErrorInfo模型。那么,在Global.asax中注册HandleError需要什么 [HandleError(ExceptionType = typeof(NullReferenceException),View = "ErrorView")]

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

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

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

然后,您可以将更具体的
HandleError
属性添加到控制器和\或操作中,这样您就可以显示另一个错误视图而不是默认视图,或者处理更特殊的异常类型

要使HandleError筛选器工作(全局或非全局),只需确保在web.config中启用自定义错误,如在
中所示(默认值为RemoteOnly,因此在开发过程中不会执行这些错误)

这已经很好地解释了(下面是一个例子)