【问题标题】:CustomErrors not redirecting to custom page but MVC default error pageCustomErrors 不重定向到自定义页面但 MVC 默认错误页面
【发布时间】:2013-04-17 23:01:38
【问题描述】:

我有一个使用 VS2012 web express 和 IIS Express 从头开始​​创建的新 MVC 4.0 解决方案。 正如图块所说,我更改了 web.config 并在中添加了以下内容:

<customErrors defaultRedirect="Errors/GenericError.html" mode="On">
    <error statusCode="404" redirect="Errors/Error404.html"/>
</customErrors>

基本上,当我在控制器中遇到异常时,默认 MVC error.cshtml 会显示错误,而不是我的自定义页面 GenericError.html。

如果我转到一个不存在的 URL,我的 Error404.html 会正确显示,但对于一般情况却不是。

有什么想法可以改变这种行为吗?

【问题讨论】:

    标签: model-view-controller web-config custom-errors


    【解决方案1】:

    听起来您的全局过滤器中没有错误属性。在 MVC 4 项目中,您应该能够搜索为您生成的类 FilterConfig:

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

    更新:

    HandleErrorAttribute 全局过滤器用于 MVC 管道中发生的错误,例如您提到的控制器中的错误。

    web.config 中的 customErrors 元素用于其他所有内容。 HandleErrorAttribute 不会遵守您在 customErrors 的 defaultRedirect 属性中输入的值。

    HandleError 过滤器将查找您应该在生成的项目shared\Error.cshtml 中拥有的共享视图。您可以通过在属性上设置属性将其指向不同的视图。

    例如,假设我们在Shared\Errors\CustomError.cshtml 下创建一个新视图,那么您可以像这样注册过滤器:

    filters.Add(new HandleErrorAttribute(){View = "Errors/CustomError"});
    

    【讨论】:

    • 我的解决方案是完全从模板生成的,所以它在 AppStart/FilterConfig.cs 中。否则我猜它甚至不会在共享视图中显示错误页面?这是我的 FilterConfig.cs:使用 System.Web;使用 System.Web.Mvc;命名空间 MyNamespace { public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } } }
    • 好的,这正是我正在经历的行为,所以现在你这样解释我至少可以掌握这个概念。我会玩弄你提到的关于使用不同视图的建议。非常感谢。将其标记为已回答。
    • 是否有任何关于 HandleErrorAttribute 如何依赖于 MVC 管道的参考资料?例如,当路径转到不存在的控制器时,这似乎被 web.config 中的 customErrors 捕获,但解析控制器应该很好地在 MVC 管道中,对吧?
    猜你喜欢
    • 1970-01-01
    • 2012-09-11
    • 2013-12-26
    • 1970-01-01
    • 2011-10-17
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    相关资源
    最近更新 更多