.NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
.NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]
、[FromQuery]
和[FromBody]
,用於指示控制器方法應如何從不同的請求源提取參數。本文將深入探討這三個屬性的作用及其用法。
一、[FromRoute]:從路由模板提取參數
作用:[FromRoute]
屬性用於標識那些應從HTTP請求的路由數據中提取的參數。當客戶端訪問一個URL,其路徑部分可能包含動態占位符(通常稱為路由參數)。[FromRoute]
屬性指示ASP.NET Core框架應將這些路由參數值綁定到控制器方法的相應參數上。
用法:假設我們有一個路由模板api/users/{userId}
,其中{userId}
是動態部分。對應的控制器方法可以這樣聲明:
[HttpGet("api/users/{userId}")]
public IActionResult GetUser([FromRoute]int userId)
{
// 使用 userId 參數查詢用戶信息並返回結果
}
在上述代碼中,userId
參數被[FromRoute]
裝飾,表示它應從請求的URL路徑(即路由數據)中獲取其值。當客戶端訪問如https://example.com/api/users/123
這樣的URL時,userId
參數會被自動賦值為123
。
二、[FromQuery]:從查詢字元串提取參數
作用:[FromQuery]
屬性指示控制器方法應從HTTP請求的查詢字元串中提取參數。查詢字元串是URL末尾以問號(?
)開始,由鍵值對組成的部分,例如?sortOrder=asc&page=2
。使用[FromQuery]
,可以輕鬆地將這些鍵值對映射到方法參數。
用法:考慮一個API端點用於分頁和排序用戶列表,其URL可能包含查詢參數:
[HttpGet("api/users")]
public IActionResult GetUsers([FromQuery]string sortOrder = "desc", [FromQuery]int page = 1, [FromQuery]int pageSize = 20)
{
// 使用 sortOrder, page, pageSize 參數執行查詢並返回結果
}
在這個例子中,sortOrder
、page
和pageSize
參數都標記為[FromQuery]
,表示它們的值應從請求的查詢字元串中提取。客戶端可以通過訪問類似https://example.com/api/users?sortOrder=asc&page=2
的URL來指定排序方式和分頁信息。
三、[FromBody]:從請求主體(Body)提取參數
作用:[FromBody]
屬性指示ASP.NET Core框架應從HTTP請求的主體(Body)中反序列化並提取參數。這通常用於處理POST
、PUT
等方法中攜帶的複雜數據,如JSON或XML格式的內容。當客戶端以請求體的形式發送非簡單類型的數據時,[FromBody]
是必不可少的。
用法:假設我們有一個API端點用於創建新用戶,客戶端以JSON格式將用戶信息發送到伺服器:
[HttpPost("api/users")]
public IActionResult CreateUser([FromBody]User user)
{
// 使用 user 參數創建新用戶並返回結果
}
public class User
{
public string Username { get; set; }
public string Password { get; set; }
public string Notes { get; set; }
}
在此示例中,User
類實例作為CreateUser
方法的參數,並用[FromBody]
修飾。當客戶端發送如下JSON到POST /api/users
:
{
"username": "DotNET開發跳槽",
"password": "s3cr3tP@ssw0rd"
"Notes": "歡迎關註公眾號:DotNET開發跳槽;加微信xbhpnet入群求職技術交流",
}
ASP.NET Core會自動將JSON內容反序列化為User
對象,並將其賦值給user
參數。
結語
[FromRoute]
、[FromQuery]
和[FromBody]
是.NET WebAPI中用於從不同請求源提取參數的核心特性。本文介紹了三者在.NET WebAPI中的角色和用法,希望給大家帶來收穫。
當然也可以不添加這些特性,若不使用[FromRoute]、[FromQuery]和[FromBody]等特性來明確指示參數來源,ASP.NET Core WebAPI會遵循預設綁定規則嘗試自動綁定請求數據。雖然這種方式在簡單場景下可能工作,但它可能導致代碼可讀性降低、綁定行為不確定性增加以及限制API設計的靈活性與可擴展性。因此,為了確保代碼清晰、易於理解和維護,以及請求數據綁定的確定性和一致性,建議在編寫控制器方法時始終顯式使用這些特性指定參數來源。
理解並恰當使用這些屬性,能夠確保您的WebAPI介面準確、高效地處理客戶端請求,實現清晰、語義化的API設計。根據請求數據的位置和格式,選擇合適的屬性進行參數綁定,是構建健壯、通用RESTful API的關鍵步驟之一。本文僅供參考。
來源公眾號↑↑↑:DotNet開發跳槽❀