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 動作的運作方式。 深入了解 POSTPUTDELETE 動作。

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 中支援這四個動作的每一個。

檢定您的知識

1.

假設您需要更新產品名稱。 哪個 HTTP 動作動詞最適合此要求?

2.

哪個情節最適合傳回 HTTP 404 狀態碼,以及如何在 ASP.NET Core 中完成此情節?

查看您的回答