ZetCode

ASP.NET HttpPut

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的 HttpPut 属性。此属性对于构建处理资源更新的 RESTful API 至关重要。

ASP.NET 是一个跨平台框架,用于构建现代 Web 应用程序。HttpPut 属性简化了处理 HTTP PUT 请求以更新资源的过程。

基本定义

ASP.NET 中的 HttpPut 属性标记一个控制器操作方法,使其仅响应 HTTP PUT 请求。PUT 用于在服务器上更新现有资源。

当应用于操作方法时,HttpPut 指定在收到 PUT 请求时应调用该方法。它通常在路由中包含资源 ID,并在请求正文中包含更新的数据。

HttpPut 是 ASP.NET 属性路由系统的一部分。它遵循 REST 约定,即 PUT 请求是幂等的——重复调用会产生相同的结果。

ASP.NET HttpPut 示例

以下示例演示了一个使用 HttpPut 更新产品信息的 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)
    };

    [HttpPut("{id}")]
    public IActionResult UpdateProduct(int id, [FromBody] Product updatedProduct)
    {
        var existingProduct = _products.FirstOrDefault(p => p.Id == id);
        if (existingProduct == null) return NotFound();

        existingProduct = existingProduct with 
        { 
            Name = updatedProduct.Name,
            Price = updatedProduct.Price 
        };

        _products[_products.IndexOf(_products.First(p => p.Id == id))] = existingProduct;
        return NoContent();
    }
}

public record Product(int Id, string Name, decimal Price);

此控制器演示了一个完整的 HttpPut 实现。该方法使用 [HttpPut("{id}")] 装饰,以处理带有 ID 参数的 PUT 请求。

该操作接受两个参数:来自路由的 ID 和来自请求正文的更新的产品数据。它首先检查产品是否存在,如果找不到则返回 404。

该示例使用 C# 9 记录类型和 with 表达式来创建产品的更新副本。然后将更新后的产品保存回列表。

该方法在成功时返回 NoContent() (HTTP 204),遵循 REST 约定。这表示请求成功,但不需要返回任何内容。

测试 HttpPut 端点

以下是如何使用 curl 测试 PUT 端点

终端
curl -X PUT -H "Content-Type: application/json" \
-d '{"id":2,"name":"Wireless Mouse","price":24.99}' \
https://:5000/api/products/2

此命令向 ID 为 2 的产品发送 PUT 请求以进行更新。请求在请求正文中包含 JSON 格式的更新产品数据。

端点期望路由和正文中的 ID 相匹配。这是确保 URL 和正在更新的资源之间一致性的常见做法。

来源

Microsoft ASP.NET Web API 文档

在本文中,我们探讨了 ASP.NET 8 中的 HttpPut 属性。这一强大功能简化了用于更新资源的 RESTful 端点的创建。

作者

我叫 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教学编程方面拥有十多年的经验。

列出所有 ASP.NET 教程