Asp.net-Mvc
如何為所有控制器編寫動作過濾器
這是一個範例操作過濾器。我們知道,當我們編寫一個動作過濾器時,我們需要用這樣的屬性來裝飾控制器,以便將它用於任何控制器。
我想知道是否有任何方法可以編寫一個適用於所有控制器的操作過濾器,而我不需要使用操作過濾器屬性來裝飾所有控制器。有任何想法嗎?
[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}", methodName, controllerName, actionName); Debug.WriteLine(message, "Action Filter Log"); } } public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { GlobalFilters.Filters.Add(new LogActionFilterAttribute()); } }