在MVC4网站中,注册了以下自定义HandleError属性
public class JHSHandleErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled)
{
return;
}
//Handler for non-500 errors
if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500)
{
return;
}
...
在像这样的Global.asax中
protected static void RegisterMVCGlobalFilters(GlobalFilterCollection filters)
{
//Add HandleError attribute as default for all controller exceptions
filters.Add(new JHS.Web.Mvc.JHSHandleErrorAttribute
{
View = "Error/general"
}, 1);
filters.Add(new HandleErrorAttribute(), 2);
}
发生异常时调用自定义HandleError属性,filterContext.ExceptionHandled=true
导致显示标准错误页面。
但是,如果将自定义HandleError属性添加到这样的单个操作,则会执行filterContext.Exceptionhandled=false
和方法的其余部分,从而导致显示自定义错误视图。
[JHS.Web.Mvc.JHSHandleError(View="Error/general")]
public ActionResult Index()
{
throw new ArgumentNullException("test");
...
为什么`filterContext.ExceptionHandled = true在自定义错误属性在全局级别注册时显示自定义视图?