HTTP 操作谓词 | CRUD 操作 | ASP.NET Core 属性 |
---|---|---|
GET | 读取 | [HttpGet] |
POST | 创建 | [HttpPost] |
PUT | 更新 | [HttpPut] |
DELETE | 删除 | [HttpDelete] |
GET 获取数据
获取全部数据
[HttpGet]
public ActionResult<List<Pizza>> GetAll() =>
PizzaService.GetAll();
- 查询服务以获取所有披萨,并通过
Content-Type
的值application/json
自动返回数据。
获取单个实例
[HttpGet("{id}")]
public ActionResult<Pizza> 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 参数匹配的产品。 |
POST 新添
[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 参数匹配的披萨。 |