首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET MVC 中 ActionFilter 執行機制深度解析

     編輯:關於ASP.NET

在 ASP.NET MVC 的四大過濾器類型中,ActionFilter 直接應用於 Action 方法,能在目標方法執行前後攔截調用以執行額外操作。這是典型的 AOP(面向切面程式設計)實現方式,適合處理橫切關注點,如日誌記錄、效能監控、交易管理等。本文將深入探討多個 ActionFilter 應用於同一 Action 方法時的執行順序與機制。

一、ActionFilter 核心介面與上下文

所有 ActionFilter 必須實作 IActionFilter 介面,定義兩個關鍵方法:

public interface IActionFilter
{
    void OnActionExecuting(ActionExecutingContext filterContext);
    void OnActionExecuted(ActionExecutedContext filterContext);
}

ActionExecutingContext:繼承自 ControllerContext,包含 ActionDescriptor(Action 描述)、ActionParameters(參數字典)與 Result(回應結果)。在 OnActionExecuting 中對 Result 賦值將直接終止後續 Filter 及目標 Action 執行,實現短路機制。

ActionExecutedContext:同樣繼承自 ControllerContext,額外提供 Exception(執行異常)、ExceptionHandled(異常處理標記)、Canceled(是否中途取消)與 Result 屬性,供後續 Filter 修改最終回應。

二、ActionFilter 執行流程詳解

ActionFilter 執行流程圖

執行流程分為三個階段:

  1. 前置階段:ActionInvoker 依據 Filter 的 Order 與 Scope 屬性排序,建立 ActionExecutingContext,依序呼叫所有 Filter 的 OnActionExecuting。若任一 Filter 設定 Result,流程短路,跳過目標 Action 與剩餘前置 Filter。
  2. Action 執行:若未短路,執行目標 Action 方法,捕獲回傳的 ActionResult 及可能拋出的異常。
  3. 後置階段:建立 ActionExecutedContext(含執行結果、異常資訊),以相反順序呼叫所有 Filter 的 OnActionExecuted。此階段 Filter 可修改 Result 覆蓋原回應。最終以最後的 Result 作為請求回應。

此「洋蔥模型」設計確保前置邏輯由外而內、後置邏輯由內而外執行,符合 AOP 切面包裹語意。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved