在 ASP.NET MVC 中,模型繫結是將 HTTP 請求資料映射到 Action 方法參數的關鍵過程。而參數的元數據描述正是模型繫結的核心。ParameterDescriptor 類型正是為此而生,它封裝了參數的名稱、型別、預設值以及繫結行為控制資訊。本文將深入剖析 ParameterDescriptor 及其相關類別 ParameterBindingInfo 的結構與用途。
ParameterDescriptor 是一個抽象類別,實作了 ICustomAttributeProvider 介面,可提供應用於參數上的自訂屬性。以下是其核心成員:
public abstract class ParameterDescriptor : ICustomAttributeProvider
{
public virtual object[] GetCustomAttributes(bool inherit);
public virtual object[] GetCustomAttributes(Type attributeType, bool inherit);
public virtual bool IsDefined(Type attributeType, bool inherit);
public abstract ActionDescriptor ActionDescriptor { get; }
public abstract string ParameterName { get; }
public abstract Type ParameterType { get; }
public virtual object DefaultValue { get; }
public virtual ParameterBindingInfo BindingInfo { get; }
}
ParameterBindingInfo 物件,控制請求資料與參數的繫結行為。ParameterBindingInfo 封裝了四個關鍵屬性:
public abstract class ParameterBindingInfo
{
public virtual IModelBinder Binder { get; }
public virtual ICollection<string> Include { get; }
public virtual ICollection<string> Exclude { get; }
public virtual string Prefix { get; }
}
IModelBinder,是模型繫結的核心執行者。預設情況下,模型繫結器會嘗試繫結複雜型別的所有公共可讀寫屬性。透過 [Bind(Include="...")] 或 [Bind(Exclude="...")] 屬性,開發者可精確控制繫結範圍。若表單欄位名稱帶有前綴(如 user.Name),設定 Prefix = "user" 即可正確映射到參數。
ParameterDescriptor 與 ParameterBindingInfo 共同構成了 ASP.NET MVC 模型繫結的元數據基石,讓開發者能以聲明式方式精細控制參數繫結邏輯,提升框架的彈性與安全性。