我有一个UsersController
,OnException
(有效),但如果我从Controller
继承BaseController
,则OnException
不会工作,即使我把它放在BaseController
。
基本上我希望我的所有控制器都继承自BaseController
,所以我可以在那里拥有一个OnException
处理程序,它可以捕获所有内容......
答案 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());
}