当我的 ASP.NET MVC 4 应用程序发生错误时,我想根据错误类型为用户自定义一个视图。例如,找不到页面或发生异常(带有一些关于异常的用户友好的详细信息)。我已经在 StackOverflow 和其他在线资源上查看了如何执行此操作的其他示例,但没有一个答案对我有用。
基本的 [HandleError] 属性在 VS2012 中似乎不适用于针对 .NET 4.5 的 MVC 4 应用程序。这是我在家庭控制器中的代码:
[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 和 customErrors mode="Off" 但这没有任何效果......共享的错误视图或我拥有的 CustomError 视图都没有被呈现。如果我将 customErrors 模式更改为关闭,然后我可以按预期看到异常详细信息,因此它正确地抛出了“哦,有些东西坏了”异常。
我还尝试将 OnException 处理程序添加到 HomeController,虽然我可以调试并看到 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")]
任何帮助将非常感激。如果您需要更多详细信息,请告诉我。