当我的ASP.NET MVC 4应用程序发生错误时,我想根据错误类型为用户自定义视图.例如,找不到页面或发生异常(包含有关异常的一些用户友好的详细信息).我已经检查了如何在StackOverflow和其他在线资源上执行此操作的其他示例,但没有一个答案对我有用.
VS2012中的基本[HandleError]属性似乎不适用于面向.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.");
}
Run Code Online (Sandbox Code Playgroud)
它只是抛出异常,我希望由于[HandleError]属性而返回默认的〜/ Shared/Error.cshtml视图,但我得到的是HTTP 500内部服务器错误,表明该页面不能显示.我检查了我的web.config,不同的配置似乎表现得很奇怪.在该部分中,它目前包含:
<customErrors mode="On" />
Run Code Online (Sandbox Code Playgroud)
(我已经尝试添加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"); …Run Code Online (Sandbox Code Playgroud)