2013-04-17 52 views
1

我有一个新的MVC 4.0解决方案,使用VS2012 web express和IIS Express从头开始创建。 由于瓦说,我改变了我的web.config和添加以下:自定义错误不会重定向到自定义页面,但MVC默认错误页面

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

基本上当我在我的控制器得到一个异常的默认MVC error.cshtml显示错误,而不是我的自定义页面GenericError。 HTML。

如果我去了一个不存在的URL,我的Error404.html显示正确,但不是通用场景。

任何想法如何改变这种行为?

回答

2

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

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

更新:

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

web.config中的customErrors元素用于其他任何事情。 HandleErrorAttribute将不会兑现您在customErrorsdefaultRedirect属性中输入的值。

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

例如,假设我们Shared\Errors\CustomError.cshtml下创建一个新的观点,那么你可以注册过滤器是这样的:被完全地从模板生成

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

我的解决方案,因此它的存在在AppStart的/ FilterConfig.cs。否则,它甚至不会在共享视图中显示错误页面,我猜? 这是我的FilterConfig.cs: using System.Web; using System.Web.Mvc; 命名了myNameSpace { 公共类一个FilterConfig { 公共静态无效RegisterGlobalFilters(GlobalFilterCollection过滤器) { filters.Add(新HandleErrorAttribute()); } } } – Jay

+0

好的,这正是我所经历的行为,所以现在你用这种方式解释我至少可以把握这个概念。我会玩弄你提到的有关使用不同观点的消声。非常感谢。标记为已回答。 – Jay

+0

是否有任何HandleErrorAttribute如何依赖于MVC管道的引用?例如,当路径到达一个不存在的控制器时,这似乎被web.config中的customErrors捕获,但解析控制器应该在MVC管道中,对吧? – Alex