asp.net-mvc - ASP.NET MVC 4 - 异常处理不起作用

标签 asp.net-mvc exception-handling asp.net-mvc-4

当我的 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/

相关文章:

asp.net - Code First 启用迁移

asp.net-mvc - asp.net MVC 3 中 View 模型的范围

c# - 显示 "504 Gateway Timeout error"的自定义错误

c# - 从 Application UnhandledException 事件中的 StackTrace 获取方法、类和行号

html - ASP.NET MVC 中 CSS 中的根目录

c# - 每个 IP 一键点击

php - 如果函数在 PHP 中抛出 fatal error ,如何在下一个循环中继续执行?

java - 让特定异常绕过广泛的 catch block 的成语?

asp.net-mvc-4 - 反向代理后面的 SignalR 1.x 执行 SSL/TLS 终止

asp.net - 404 重定向仅针对页面,不适用于图像