這裏是一個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");
}
}
如果我們使用GlobalFilters,那麼我的操作過濾器將被調用所有控制器的操作方法? – Thomas 2014-09-25 07:52:19
是的,應該實施IActionFilter。實際上,您可以看到在創建MVC應用程序時自動生成的FilterConfig.cs中註冊的HandleErrorAttribute。 – 2014-09-25 07:58:59
執行IActionFilter的手段?我的所有控制器需要擴展IActionFilter?不是很清楚你想做什麼。如果可能的話包括一個小的完整代碼謝謝 – Thomas 2014-09-25 08:29:15