2012-08-09 38 views

回答

5

你并不需要从一个自定义的基本控制器类,以便继承让所有的控制器以相同的方式处理异常。你可以用ActionFilter来完成。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, 
    AllowMultiple = true, Inherited = true)] 
public class CustomHandleErrorAttribute : HandleErrorAttribute 
{ 
    public override void OnException(ExceptionContext context) 
    { 
     // do custom exception handling here 
     // to return View("Error"), you can just do this: 
     context.Result = new ViewResult { ViewName = "Error" }; 
    } 
} 

您可以在图书馆这个Global.asax中应用此所有控制器:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    //filters.Add(new HandleErrorAttribute()); // default MVC setting 
    filters.Add(new CustomHandleErrorAttribute()); 
} 
+1

谢谢你们的答案,它的工作:)。辉煌。一个问题,我怎样才能从OnException中显示我的erorr视图页面?我不能再打电话查看(“错误”),因为我不在控制器 – Baconbeastnz 2012-08-10 01:22:02

+0

@baconbeastnz我可以建议你问这是另一个问题。我对于一个很好奇的回答 – rossipedia 2012-08-10 01:29:14

+0

@Baconbeastnz和@Bryan Ross,我已经更新了我的答案。几乎任何你可以从控制器上做的事情,你都可以从一个动作过滤器中做到,你只需要做一点不同的事情。 'return View(“Error”)'只是构建一个'ViewResult'对象的'System.Web.Mvc.Controller'方法。我建议你下载MVC源代码并看看它。你总是可以用它作为参考来找出如何做这样的事情。 – danludwig 2012-08-10 12:54:44