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

Bac*_*tnz 2 asp.net asp.net-mvc aop exception-handling

我有一个UsersController,有OnException(有效),但是如果我Controller继承BaseController,OnException那就行不通,即使我把它放进去了BaseController.

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

dan*_*wig 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" };
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用此Global.asax将其应用于库中的所有控制器:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    //filters.Add(new HandleErrorAttribute()); // default MVC setting
    filters.Add(new CustomHandleErrorAttribute());
}
Run Code Online (Sandbox Code Playgroud)