ZetCode

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 控制器。

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;
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 模式。

来源

Microsoft ASP.NET Web API 文档

在本文中,我们探讨了 ASP.NET 8 中的 HttpPost 属性。这项基本功能为 Web API 提供了安全且结构化的数据提交。

作者

我叫 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教学编程方面拥有超过十年的经验。

列出所有 ASP.NET 教程