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

ASP.NET MVC 核心描述對象:ActionDescriptor 與 AsyncActionDescriptor 全解析

     編輯:關於ASP.NET

前言

ActionDescriptor 描述控制器內的單一 Action 方法,包含參數、篩選器、選擇器等元數據。非同步版本 AsyncActionDescriptor 則服務於 AsyncController 的非同步動作。本文將逐一剖析。

ActionDescriptor 核心結構

public abstract class ActionDescriptor : ICustomAttributeProvider
{
    public virtual object[] GetCustomAttributes(bool inherit);
    public virtual object[] GetCustomAttributes(Type attributeType, bool inherit);
    public virtual bool IsDefined(Type attributeType, bool inherit);
    public virtual IEnumerable<FilterAttribute> GetFilterAttributes(bool useCache);

    public abstract ParameterDescriptor[] GetParameters();
    public abstract object Execute(ControllerContext controllerContext, IDictionary<string, object> parameters);
    public virtual ICollection<ActionSelector> GetSelectors();
    public virtual FilterInfo GetFilters();

    public abstract string ActionName { get; }
    public abstract ControllerDescriptor ControllerDescriptor { get; }
    public virtual string UniqueId { get; }
}
  • GetParameters:回傳參數描述器陣列,模型繫結核心依賴。
  • Execute:同步執行 Action,參數為 ControllerContext 與參數字典。
  • GetSelectors:回傳 ActionSelector 委派集合,用於依 ControllerContext 判斷 Action 是否匹配(如 HTTP 動詞、Ajax 請求等)。
  • GetFilters:回傳 FilterInfo,含四類篩選器集合:ActionFilters、AuthorizationFilters、ExceptionFilters、ResultFilters。

ActionSelector 委派

public delegate bool ActionSelector(ControllerContext controllerContext);

預設回傳空集合,開發者可透過 ActionMethodSelectorAttribute 衍生類別(如 HttpPostAttribute)參與選擇邏輯。

AsyncActionDescriptor:非同步動作描述

public abstract class AsyncActionDescriptor : ActionDescriptor
{
    public abstract IAsyncResult BeginExecute(ControllerContext controllerContext, IDictionary<string, object> parameters, AsyncCallback callback, object state);
    public abstract object EndExecute(IAsyncResult asyncResult);
    public override object Execute(ControllerContext controllerContext, IDictionary<string, object> parameters);
}

Execute 覆寫後直接拋出 InvalidOperationException,強制非同步動作必須走 BeginExecute/EndExecute 流程。

總結

ActionDescriptor 統籌 Action 執行所需的所有元數據,其非同步對應版本確保非同步動作走正確管線,是 MVC 請求處理管線的關鍵樞紐。

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