【问题标题】:Exception not being passed to my Error Page in MVC4异常未传递到 MVC4 中的错误页面
【发布时间】:2013-12-28 11:57:35
【问题描述】:

我已将customErrors 模式设置为开启并重定向到:

这是我对解决方案的看法:

每当我遇到未处理的异常时,我的应用程序都会按预期将我重定向到错误页面。但是,我丢失了异常信息,因为我假设应用程序正在重定向。我什至在 customErrors 元素中尝试了redirectMode="ResponseRewrite",但没有奏效。

所以,这是我的错误控制器上的“索引”视图,应用程序正在重定向它以注意模型:

再往下,我有:

但是,@Model 为空。如何从 customErrors 重定向中获取异常信息?

【问题讨论】:

  • 如果要记录原始异常,需要在重定向之前进行。
  • @Maess 因此,如果我想要异常详细信息,我将无法使用 customErrors 重定向?
  • 不,你只需要在重定向之前挂上你的日志,看看下面的答案。

标签: asp.net-mvc c#-4.0 error-handling custom-errors


【解决方案1】:

要获得该模型,您需要使用HandleErrorAttribute 过滤器来捕获错误。 您可以在此处查看说明:http://www.c-sharpcorner.com/UploadFile/abhikumarvatsa/handleerrorattribute-or-error-handling-in-mvc-4/

TL;DR:

禁用重定向,但确保自定义错误仍然存​​在:

<customErrors mode="On"/>

确保HandleErrorAttribute 过滤器已全局注册(默认情况下):

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
}

将您的错误视图移动/重命名为~\Views\Shared\Error.cshtml

【讨论】:

  • 我这样做了,但它没有将我发送到共享的 Error.cshtml 页面 - 它返回典型的“/***** 应用程序中的服务器错误”黄屏死机。
  • 我还要说我在FilterConfig.cs(RegisterGlobalFilters)中设置了一个断点,它永远不会被命中。我清理了我的解决方案,从头开始,它没有受到影响。
  • 您确定过滤器已在全球范围内注册吗?在 ASP.NET MVC 4+ 中,RegisterGlobalFilters 方法应定义在 App_Start\FilterConfig.cs 和 Global.asax.cs 中,应在 Application_Start 中对其进行调用,如下所示:FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  • 是的,我查过了,一切都如你所说。 :(
  • Application_Start 被调用了吗?如果没有,应用程序可能无法正常重启...
猜你喜欢
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
  • 2014-10-19
  • 2013-07-13
  • 2011-10-02
  • 2013-05-23
  • 1970-01-01
相关资源
最近更新 更多