Action 過濾器在代碼中體現為添加到Action上方的屬性,MVC框架包含了一些過濾器,如:
OutputCache –指示Controller在指定時間內緩存返回的結果。
HandleError –處理Contrller中Action拋出的異常
Authorize – 約束特定用戶或角色對Action的訪問
使用Action 過濾器
Action 過濾器不僅可以控制單個Action,也可以控制整個Contrller。同時,一個Action可以應用多個過濾器。比如:
public class DataController : Controller
{
[OutputCache(Duration=10)]
public string Index()
{
return DateTime.Now.ToString("T");
}
}
自定義過濾器
自定義過濾器必須繼承System.Web.Mvc.FilterAttribute ,并且實現上述幾個接口中的一個或者多個。MVC框架為了方便開發人員,預定義了一個ActionFilterAttribute 類,它已實現了IActionFilter 和IResultFilter 接口。你可以重載 ActionFilterAttribute 類中以下幾個方法:
OnActionExecuting – 在Action執行之前調用。
OnActionExecuted – 在Action執行之后調用。
OnResultExecuting – 在Result產生之前調用。
OnResultExecuted – 在Result產生之前調用。
下面示例一個類:

Code
public class LogActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Log("OnActionExecuting", filterContext.RouteData);
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
Log("OnActionExecuted", filterContext.RouteData);
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
Log("OnResultExecuting", filterContext.RouteData);
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
Log("OnResultExecuted", 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");
}
}
NET技術:ASP.NET MVC筆記 之 Action 過濾器,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。