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

ASP.NET MVC 核心管線:ActionDescriptor 建立與 ControllerDescriptor 關係深度解析

     編輯:關於ASP.NET

MVC 請求處理核心在於將 URL 對應至 ActionDescriptor(動作描述物件),再透過反射呼叫對應方法。本文深入剖析 ControllerActionInvoker 如何協作 ControllerDescriptor 與 ActionDescriptor:

核心協作流程

ControllerDescriptor controllerDescriptor = GetControllerDescriptor(controllerContext);
ActionDescriptor actionDescriptor = FindAction(controllerContext, controllerDescriptor, actionName);
// 實際上等同於:
ActionDescriptor actionDescriptor = controllerDescriptor.FindAction(controllerContext, actionName);

關鍵類別結構

  • ReflectedControllerDescriptor:ControllerDescriptor 唯一實作,持有:
    • _canonicalActionsCache:快取所有合法 ActionDescriptor 陣列。
    • _controllerType:Controller CLR 型別。
    • _selector:ActionMethodSelector 執行個體,負責依據屬性(HttpGet、ActionName、NonAction 等)篩選合法動作方法。
  • ActionMethodSelector:封裝動作方法選擇邏輯,支援多載、屬性限制、別名等規則。

為何需要 ActionDescriptor?

Action 方法上常附掛多個 Filter(Authorization、Action、Result、Exception),執行時需將 Filter 與 Action 無縫整合(AOP),ActionDescriptor 保存方法中繼資料(參數、回傳型別、屬性),供 Invoker 建構執行管線使用。

文章為系列探討 MVC 內部機制的開篇,後續將詳細說明 ActionMethodSelector 運作細節。

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