基本的[HandleError]属性似乎无法在针对.NET 4.5的MVC 4应用程序中使用VS2012。以下是我在主控制器中的代码:
[HandleError]
public ActionResult Index()
{
Response.TrySkipIisCustomErrors = true; //doesn't work with or without this
throw new NullReferenceException("Uh oh, something broke.");
}
它只是抛出了一个异常,我期望由于[HandleError]属性,返回默认的~/Shared/Error.cshtml视图,但是我得到的是HTTP 500内部服务器错误,表示无法显示页面。我检查了我的web.config文件,不同的配置似乎表现出奇怪的行为。在部分中,它当前包含:
<customErrors mode="On" />
我尝试添加了defaultRedirect和自定义错误模式mode="Off",但是都没有任何效果……无论是共享的Error视图还是我拥有的CustomError视图都没有被渲染。如果我将customErrors mode更改为off,则可以按预期查看异常详细信息,因此它确实正确地抛出了“糟糕,出错了”异常。
我还尝试在HomeController中添加OnException处理程序,虽然可以通过调试看到OnException事件已被触发,但它并没有产生任何影响:
protected override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
filterContext.ExceptionHandled = true;
if (filterContext == null)
{
filterContext.Result = View("CustomError");
return;
}
Exception e = filterContext.Exception;
// TODO: Log the exception here
ViewData["Exception"] = e; // pass the exception to the view
filterContext.Result = View("CustomError");
}
我还尝试过更改[HandleError]以指定视图,但似乎也没有任何作用:
[HandleError(View="CustomError")]
非常感谢您的帮助。如果您需要更多详细信息,请告诉我。
Response.StatusCode
时,我没有得到自定义页面。如果我删除StatusCode,那么我会得到自定义页面,但它不会触发其他未找到路径或异常(<site>/blah)。我已经进行了本地和远程测试。 - Robert Becker