前言: 在.NET Core中的Web API中,模型繫結是一種將客戶端傳送的資料(如JSON、XML等)轉換為C#物件(通常是模型類)的過程。這個過程允許你以更結構化和型別安全的方式處理請求資料。以下是一些模型繫結的示例用法和使用場景。
1. 基本模型繫結
使用場景:最常見的場景是當你有一個模型類,並希望直接從請求體(通常是JSON或XML)中填充這個模型。
在這個例子中,[FromBody]
屬性告訴ASP.NET Core從請求體中讀取資料,並嘗試將其繫結到User
型別的user
引數上。
2. 路由模型繫結
使用場景:當你需要從URL的路由部分獲取資料並繫結到方法的引數上時。
在這個例子中,ASP.NET Core會自動將URL中的{id}
部分解析為整數,並賦值給id
引數。
3. 查詢字串模型繫結
使用場景:當你需要從查詢字串中獲取資料並繫結到模型上時。
在這個例子中,[FromQuery]
屬性(雖然它通常是可選的,因為它是預設行為)告訴ASP.NET Core從查詢字串中讀取資料,並嘗試將其繫結到SearchOptions
型別的options
引數上。
4. 複合模型繫結
使用場景:當請求體、查詢字串或路由資料需要同時繫結到單個方法的不同引數或複雜模型上時。
在這個例子中,User
物件從請求體中讀取,而revision
引數從查詢字串中讀取。
5. 自定義模型繫結
使用場景:當內建的模型繫結功能不足以滿足你的需求時,例如,當你需要處理非標準格式的資料或執行復雜的繫結邏輯時。
示例(這只是一個概念上的示例,因為實現自定義模型繫結涉及到建立自定義的IModelBinder
):
// 假設你有一個非常複雜的繫結邏輯,需要自定義ModelBinder來處理 // 你將需要建立一個實現了IModelBinder的類,並在需要的地方使用[ModelBinder]屬性指定它
[HttpPost("special/data")]
public IActionResult ReceiveSpecialData([ModelBinder(typeof(MyCustomModelBinder))] MySpecialModel model)
{
// 處理model... return Ok();
}
在這個例子中,MySpecialModel
的繫結邏輯透過MyCustomModelBinder
類來實現,該類實現了IModelBinder
介面。
總結:
模型繫結是.NET Core Web API中一個非常強大的特性,它允許你以靈活和型別安全的方式處理請求資料。透過了解不同的繫結方式和場景,你可以構建出既高效又易於維護的API。