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
请求。 此方法并不像我们在 Get()
方法中看到的那样返回披萨列表,而是返回 IActionResult
响应。
IActionResult
可让客户端知道请求是否成功,并提供新创建的披萨的 ID。 IActionResult
使用标准 HTTP 状态代码,因此,无论客户端使用哪种语言或者在哪个平台上运行,它都能轻松地与客户端集成。
ASP.NET Core 操作结果 |
HTTP 状态代码 | 说明 |
---|---|---|
CreatedAtAction |
201 | 已将披萨添加到内存中缓存。 该披萨包含在由 accept HTTP 请求标头中所定义的媒体类型(默认情况下为 JSON)的响应正文中。 |
BadRequest 为隐式 |
400 | 请求正文的 pizza 对象无效。 |
幸运的是,ControllerBase
具有一些实用工具方法,它们可为你创建适当的 HTTP 响应代码和消息。 你将在下一个练习中了解这些方法的工作原理。
PUT
修改或更新库存中的披萨类似于我们实现的 POST 方法,但它使用 [HttpPut]
属性并接受 id
参数以及需要更新的 Pizza
对象:
[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 中分别支持这四项操作。