ASP.NET HttpPost
最后修改于 2025 年 4 月 3 日
在本文中,我们探讨 ASP.NET 8 中的 HttpPost 属性。此属性对于构建处理数据提交和创建的 RESTful API 至关重要。
ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。HttpPost 属性简化了表单提交和 API 数据创建的处理。
基本定义
ASP.NET 中的 HttpPost 属性标记一个控制器操作方法,使其仅响应 HTTP POST 请求。POST 是创建新资源的标准 HTTP 方法。
当应用于操作方法时,HttpPost 指定在收到 POST 请求时应调用该方法。它通常与模型绑定一起用于处理提交的数据。
HttpPost 是 ASP.NET 属性路由系统的一部分。它与数据注释配合使用,在处理传入数据之前对其进行验证。这确保了数据完整性和安全性。
ASP.NET HttpPost 示例
以下示例演示了一个使用 HttpPost 创建新产品的 Web API 控制器。
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run();
这设置了一个基本的 ASP.NET 应用程序,并支持控制器。MapControllers 方法为所有控制器启用属性路由。
using Microsoft.AspNetCore.Mvc;
using System.ComponentModel.DataAnnotations;
[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)
};
[HttpGet]
public IActionResult GetAllProducts()
{
return Ok(_products);
}
[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(GetAllProducts),
new { id = newProduct.Id },
newProduct);
}
}
public record Product(int Id, string Name, decimal Price);
public record ProductCreateDto(
[Required][StringLength(100)] string Name,
[Range(0.01, 10000)] decimal Price
);
此控制器演示了 GET 和 POST 操作。HttpPost 方法通过 POST 请求到 /api/products 来处理新产品的创建。
[FromBody] 属性指示 ASP.NET 将请求正文绑定到 productDto 参数。数据注释在处理前验证输入。
如果验证失败,方法将返回一个 400 Bad Request 响应,其中包含错误详细信息。成功时,它会返回 201 Created 响应,并在 Location 标头中包含新产品的 URI。
该示例展示了正确的 REST 约定:使用 DTO 进行输入、验证、适当的状态码以及用于资源创建响应的 CreatedAtAction 模式。
来源
在本文中,我们探讨了 ASP.NET 8 中的 HttpPost 属性。这项基本功能为 Web API 提供了安全且结构化的数据提交。