这是一个smaple动作过滤器,我们知道当我们编写动作过滤器时,我们需要像这样装饰控制器来为任何特定的控制器实现它,但是我想知道有没有办法编写动作过滤器,它将适用于所有控制器,我不需要用动作过滤器属性来装饰控制器.任何的想法.
[LogActionFilter] public class HomeController : Controller {} public class LogActionFilter : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { Log("OnActionExecuting",filterContext.RouteData); } public override void OnActionExecuted(ActionExecutedContext filterContext) { Log("OnActionExecuted",filterContext.RouteData); } private void Log(string methodName,RouteData routeData) { var controllerName = routeData.Values["controller"]; var actionName = routeData.Values["action"]; var message = String.Format("{0} controller:{1} action:{2}",methodName,controllerName,actionName); Debug.WriteLine(message,"Action Filter Log"); } }
解决方法
public class LogActionFilterAttribute : IActionFilter { public void OnActionExecuted(ActionExecutedContext filterContext) { Log("OnActionExecuted",filterContext.RouteData); } public void OnActionExecuting(ActionExecutingContext filterContext) { Log("OnActionExecuting",filterContext.RouteData); } private void Log(string methodName,RouteData routeData) { var controllerName = routeData.Values["controller"]; var actionName = routeData.Values["action"]; var message = String.Format("{0} controller:{1} action:{2}",actionName); Debug.WriteLine(message,"Action Filter Log"); } } public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { GlobalFilters.Filters.Add(new LogActionFilterAttribute()); } }