| HTTP 操作谓词 | CRUD 操作 | ASP.NET Core 属性 |
|---|---|---|
| GET | 读取 | [HttpGet] |
| POST | 创建 | [HttpPost] |
| PUT | 更新 | [HttpPut] |
| DELETE | 删除 | [HttpDelete] |
GET 获取数据
获取全部数据
[HttpGet] public ActionResult> GetAll() => PizzaService.GetAll();
- 查询服务以获取所有披萨,并通过 Content-Type 的值 application/json 自动返回数据。
获取单个实例
[HttpGet("{id}")]
public ActionResult Get(int id)
{
var pizza = PizzaService.Get(id);
if(pizza == null)
return NotFound();
return pizza;
}
- 要求 pizza/ 之后的 URL 段中包含 id 参数的值。 请记住,控制器级别的 /pizza 属性定义了 [Route] 模式。
- 查询数据库以获取与所提供的 id 参数匹配的披萨。
上述操作中使用的每个 ActionResult 实例都映射到下表中对应的 HTTP 状态代码:
| ASP.NET Core 操作结果 | HTTP 状态代码 | 说明 |
|---|---|---|
| Ok 为隐式 | 200 | 内存中缓存中存在与所提供的 id 参数匹配的产品。 该产品包含在由 accept HTTP 请求标头中所定义的媒体类型(默认情况下为 JSON)的响应正文中。 |
| NotFound | 404 | 内存中缓存中不存在与所提供的 id 参数匹配的产品。 |
[HttpPost]
public IActionResult Create(Pizza pizza)
{
PizzaService.Add(pizza);
return CreatedAtAction(nameof(Create), new { id = pizza.Id }, pizza);
}
CreatedAtAction 方法调用中的第一个参数表示操作名称。 nameof 关键字用于避免对操作名称进行硬编码。 CreatedAtAction 使用操作名称来生成 location HTTP 响应标头,该标头包含新创建的披萨的 URL
此方法并不像我们在 Get() 方法中看到的那样返回披萨列表,而是返回 IActionResult 响应。IActionResult 可让客户端知道请求是否成功,并提供新创建的披萨的 ID。 IActionResult 通过使用标准 HTTP 状态代码来完成该操作,因此,无论客户端使用哪种语言或者在哪个平台上运行,它都能轻松地与客户端集成。
| ASP.NET Core 操作结果 | HTTP 状态代码 | 说明 |
|---|---|---|
| CreatedAtAction | 201 | 已将披萨添加到内存中缓存。 该披萨包含在由 accept HTTP 请求标头中所定义的媒体类型(默认情况下为 JSON)的响应正文中。 |
| BadRequest 为隐式 | 400 | 请求正文的 pizza 对象无效。 |
PUT 修改
[HttpPut("{id}")]
public IActionResult Update(int id, Pizza pizza)
{
if (id != pizza.Id)
return BadRequest();
var existingPizza = PizzaService.Get(id);
if(existingPizza is null)
return NotFound();
PizzaService.Update(pizza);
return NoContent();
}
- 要求 pizza/ 之后的 URL 段中包含 id 参数的值。
- 返回 IActionResult,因为在运行时之前,ActionResult 返回类型未知。 BadRequest、NotFound 和 NoContent 方法分别返回 BadRequestResult、NotFoundResult 和 NoContentResult 类型。
- 由于控制器批注通过 [ApiController] 属性进行,因此暗示着将在请求正文中找到 Pizza 参数。
| ASP.NET Core 操作结果 | HTTP 状态代码 | 说明 |
|---|---|---|
| NoContent | 204 | 已在内存中缓存中更新了披萨。 |
| BadRequest | 400 | 请求正文的 Id 值与路由的 id 值不匹配。 |
| BadRequest 为隐式 | 400 | 请求正文的 Pizza 对象无效。 |
DELETE 删除
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
var pizza = PizzaService.Get(id);
if (pizza is null)
return NotFound();
PizzaService.Delete(id);
return NoContent();
}
- 要求 pizza/ 之后的 URL 段中包含 id 参数的值。
- 返回 IActionResult,因为在运行时之前,ActionResult 返回类型未知。 NotFound 和 NoContent 方法分别返回 NotFoundResult 和 NoContentResult 类型。
| ASP.NET Core 操作结果 | HTTP 状态代码 | 说明 |
|---|---|---|
| NoContent | 204 | 已从内存中缓存中删除了披萨。 |
| NotFound | 404 | 内存中缓存中不存在与所提供的 id 参数匹配的披萨。 |



