当我的 ASP.NET MVC 4 应用程序发生错误时,我想根据错误类型为用户自定义一个 View 。例如,找不到页面或发生了异常(关于异常的一些用户友好的详细信息)。我已经在 StackOverflow 和其他在线资源上检查了如何执行此操作的其他示例,但没有一个答案对我有用。
基本的 [HandleError] 属性在 VS2012 中似乎不适用于面向 .NET 4.5 的 MVC 4 应用程序。这是我的家庭 Controller 中的代码:
[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 View ,但我得到的只是一个 HTTP 500 内部服务器错误,表明该页面无法显示。我检查了我的 web.config,不同的配置似乎表现得很奇怪。在该部分中,它目前包含:
<customErrors mode="On" />
(我已经尝试添加 defaultRedirect 和 customErrors mode="Off",但这没有任何效果......共享错误 View 或我拥有的 CustomError View 都没有被渲染。如果我将 customErrors 模式更改为关闭,然后我可以按预期看到异常详细信息,因此它正确地抛出“呃,有些东西坏了”异常。
我还尝试向 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] 以指定 View ,但这似乎也没有任何作用:
[HandleError(View="CustomError")]
任何帮助将非常感激。如果您需要更多详细信息,请告诉我。
最佳答案
我似乎记得您必须从非本地主机 IP 地址(通常是另一台计算机)调用页面。并且它必须是基于 IIS 的服务器,而不是内置的开发服务器(所以是 IIS 或 IIS Express,但是您必须为外部访问配置 IIS Express,这很痛苦)。
你实际上可以调试它,你必须在你的调试计算机上配置你的本地服务器来接受外部请求,然后从远程服务器调用你的本地服务器。
关于asp.net-mvc - ASP.NET MVC 4 - 异常处理不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13845318/