1

我有一个使用 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 会正确显示,但不适用于一般场景。

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

4

1 回答 1

2

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

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

更新:

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

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

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

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

filters.Add(new HandleErrorAttribute(){View = "Errors/CustomError"});
于 2013-04-17T23:13:16.157 回答