如果继承BaseController,则使用OnException的ASP.NET MVC4 Controller无法正常工作

时间:2012-08-09 23:56:33

标签: asp.net asp.net-mvc exception-handling aop

我有一个UsersControllerOnException(有效),但如果我从Controller继承BaseController,则OnException不会工作,即使我把它放在BaseController

基本上我希望我的所有控制器都继承自BaseController,所以我可以在那里拥有一个OnException处理程序,它可以捕获所有内容......

1 个答案:

答案 0 :(得分: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());
}