2010-01-09 44 views
3

我需要显示使用customerror错误页面上web.config自定义错误页在MVC

但watever的错误可能是,即使是在web.config中我指定的一些版本错误也需要它来显示错误页面,

我该怎么做。我尝试,但URL重定向到

"http://localhost:1966/Error.html?aspxerrorpath=Error.html" 

CustomError标签:

<customErrors mode="On" defaultRedirect="Error.html" /> 

而且从MVC,不是煤矿展示了另一个错误页面。

+0

错误重定向只在我的IIS的工作不是在本地VS开发服务器。 – Santhosh

回答

7

在ASP.NET MVC中,错误处理通常使用HandleError属性指定。默认情况下,它使用名为“错误”的视图来显示自定义错误页面。如果您只想自定义此视图,则可以编辑Views/Shared/Error.aspx。

如果您希望在特定情况下使用不同的视图,则可以明确提供视图属性。

这里有一个自定义错误查看控制器操作的例子:

[HandleError(View = "CustomError")] 
public ViewResult Foo() 
{ 
    // ... 
} 

对于全局错误在ASP.NET MVC处理,见this post

1

您可以使用上述HandleError属性标记的解决方案。

捕捉错误的另一个解决方案是让所有控制器类派生自一个基类。并在基类ovveride的OnException方法内显示用户友好的错误视图,例如“〜/ Shared/Error.aspx”

您还需要在根web.config中为此解决方案定义<customErrors mode="On" >工作。

public class BaseController : Controller 
{ 
     ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

    public BaseController() 
    { 
    } 

    protected override void OnException(ExceptionContext filterContext) 
    { 
     // Log the error that occurred. 
     log.Fatal("Generic Error occured",filterContext.Exception); 

     // Output a nice error page 
     if (filterContext.HttpContext.IsCustomErrorEnabled) 
     { 
      filterContext.ExceptionHandled = true; 
      View("Error").ExecuteResult(ControllerContext); 
     } 
    } 

} 

上面的解决方案捕获了大多数可能发生的“死亡错误的黄色屏幕”。

处理其他错误,如404我用如下因素图路线最后在Global.asax中的RegisterRoutes(RouteCollection路线)

// Show a 404 error page for anything else. 
      routes.MapRoute(
       "Error", 
       "{*url}", 
       new { controller = "Shared", action = "Error" } 
      );