ASP.NET Created
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 ASP.NET 8 中的 Created 响应。对于创建新资源的 RESTful API 来说,这种响应类型至关重要。
ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。Created 响应遵循 REST 资源创建约定。
基本定义
ASP.NET 中的 Created 响应返回 HTTP 状态码 201,表示资源创建成功。它通常包含新资源的地址。
在 RESTful API 的 POST 方法中使用此响应类型。它遵循 HTTP 协议规范的成功创建操作。
Created 响应通常包括指向新资源的 Location 标头以及响应体中的资源本身。这为创建的数据提供了即时访问。
ASP.NET Created 示例
以下示例演示了一个使用 Created 响应的 Web API 控制器。
Program.cs
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run();
这设置了一个基本的 ASP.NET 应用程序,并支持控制器。MapControllers 方法为控制器启用属性路由。
Controllers/ProductsController.cs
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
private static List<Product> _products = new()
{
new Product(1, "Laptop", 999.99m),
new Product(2, "Mouse", 19.99m),
new Product(3, "Keyboard", 49.99m)
};
[HttpPost]
public IActionResult CreateProduct([FromBody] ProductCreateDto productDto)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var newProduct = new Product(
_products.Max(p => p.Id) + 1,
productDto.Name,
productDto.Price);
_products.Add(newProduct);
return CreatedAtAction(
nameof(GetProductById),
new { id = newProduct.Id },
newProduct);
}
[HttpGet("{id}")]
public IActionResult GetProductById(int id)
{
var product = _products.FirstOrDefault(p => p.Id == id);
if (product == null) return NotFound();
return Ok(product);
}
}
public record Product(int Id, string Name, decimal Price);
public record ProductCreateDto(string Name, decimal Price);
此控制器演示了一个创建新产品并返回 Created 响应的 POST 方法。CreatedAtAction 方法会生成一个 201 响应。
CreatedAtAction 方法接受三个参数:用于生成 URL 的操作名称、该操作的路由值以及要包含在响应体中的已创建资源。
该示例通过在 Location 标头中返回新资源的地址,展示了正确的 RESTful 约定。客户端可以使用此 URL 立即访问创建的资源。
响应同时包含新产品数据和可访问它的 URL。这为 API 消费者提供了关于创建结果的完整信息。
来源
在本文中,我们探讨了 ASP.NET 8 中的 Created 响应。这一强大功能有助于构建符合 HTTP 标准的、规范的 RESTful API。