ASP.NET Core 中的 CRUD 動作
我們的披薩服務支援 CRUD 作業,以取得披薩清單。 這些作業透過 HTTP 指令動詞執行,而這些指令動詞透過 ASP.NET Core 屬性來對應。 如您所見,HTTP GET
指令動詞用來從服務中擷取一或多個項目。 此類動作會以 [HttpGet]
屬性標註。
下表顯示您針對披薩服務實作的四項作業對應:
HTTP 動作動詞 | CRUD 作業 | ASP.NET Core 屬性 |
---|---|---|
GET |
參閱 | [HttpGet] |
POST |
建立 | [HttpPost] |
PUT |
Update | [HttpPut] |
DELETE |
刪除 | [HttpDelete] |
您已經了解 GET
動作的運作方式。 深入了解 POST
、PUT
和 DELETE
動作。
POST
若要讓使用者能將新項目新增至端點,您必須使用 [HttpPost]
屬性實作 POST
動作。 將項目 (在此範例中是披薩) 傳入方法當作參數時,ASP.NET Core 會自動將傳送到端點的應用程式/JSON,轉換為填入的 .NET Pizza
物件。
以下是 Create
方法的方法特徵標記,您將在下一節中實作此方法:
[HttpPost]
public IActionResult Create(Pizza pizza)
{
// This code will save the pizza and return a result
}
[HttpPost]
屬性會使用 Create()
方法,對應傳送到 http://localhost:5000/pizza
的 HTTP POST
要求。 此方法傳回 IActionResult
回應,不像 Get()
方法傳回披薩清單。
IActionResult
會讓用戶端知道要求是否成功,並提供新建立披薩的 ID。 IActionResult
會使用標準 HTTP 狀態碼,因此不論其語言或使用的平台為何,都可以輕鬆地與用戶端整合。
ASP.NET Core 動作結果 |
HTTP 狀態碼 | 描述 |
---|---|---|
CreatedAtAction |
201 | 披薩已新增至記憶體內部快取。 披薩包含在媒體類型的回應本文中,如 accept HTTP 要求標頭 (預設為 JSON) 中所定義。 |
意指 BadRequest |
400 | 要求本文的 pizza 物件無效。 |
幸運的是,ControllerBase
有公用程式方法,可為您建立適當的 HTTP 回應碼和訊息。 您將在下一個練習中看到這些方法的運作方式。
PUT
修改或更新我們庫存中的披薩類似於您實作的 POST 方法,但會使用 [HttpPut]
屬性,並且取得除了需要更新的 Pizza
物件以外的 id
參數:
[HttpPut("{id}")]
public IActionResult Update(int id, Pizza pizza)
{
// This code will update the pizza and return a result
}
每個用於上述動作的 ActionResult
執行個體,都會對應至下表中的相應 HTTP 狀態碼:
ASP.NET Core 動作結果 |
HTTP 狀態碼 | 描述 |
---|---|---|
NoContent |
204 | 披薩已在記憶體內部快取中更新。 |
BadRequest |
400 | 要求本文的 Id 值不符合路由的 id 值。 |
意指 BadRequest |
400 | 要求本文的 Pizza 物件無效。 |
DELETE
其中一個較簡單要實作的動作是 DELETE
動作,只接受披薩的 id
參數,以便從記憶體內部快取中移除:
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
// This code will delete the pizza and return a result
}
每個用於上述動作的 ActionResult
執行個體,都會對應至下表中的相應 HTTP 狀態碼:
ASP.NET Core 動作結果 |
HTTP 狀態碼 | 描述 |
---|---|---|
NoContent |
204 | 已從記憶體內部快取中刪除披薩。 |
NotFound |
404 | 符合所提供 id 參數的披薩,不在記憶體內部快取中。 |
下一個單元的練習會示範如何在 Web API 中支援這四個動作的每一個。