當需要在 Action 執行前後插入共同邏輯(如權限檢查、輸出快取、防盜連結、本地化設定、動態 Action)時,可使用 Action Filter。Filter 採聲明式程式設計,僅能套用於 Action 方法。
ActionFilterAttribute 抽象類別。OnActionExecuting(FilterExecutingContext filterContext):Action 執行前。OnActionExecuted(FilterExecutedContext filterContext):Action 執行後。public class TestFilter : ActionFilterAttribute
{
public override void OnActionExecuting(FilterExecutingContext filterContext)
{
filterContext.HttpContext.Session["temp"] += "OnActionExecuting<br/>";
}
public override void OnActionExecuted(FilterExecutedContext filterContext)
{
filterContext.HttpContext.Session["temp"] += "OnActionExecuted<br/>";
}
}
[TestFilter]
public void Index()
{
this.HttpContext.Session["temp"] += "Action<br/>";
RenderView("Index");
}
Session["temp"] 將依序記錄:
Action Filter 提供乾淨的橫切關注點實作方式,理解其執行順序對正確實作邏輯至關重要。後續版本更擴充為非同步 Filter(IAsyncActionFilter)以支援非同步管線。