.NET中优雅使用Patch: JsonPatch

圆咕噜咕噜  金牌会员 | 2025-2-12 15:09:12 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 892|帖子 892|积分 2676

弁言

在当代 Web API 开辟中,我们经常需要对资源举行部分更新(Partial Update)。传统的 PUT 哀求会要求发送整个对象,而 PATCH 哀求可以仅发送需要更新的字段。ASP.NET Core 提供了 JsonPatchDocument 来简化这一操作。
什么是 JsonPatch?

JsonPatch(基于 RFC 6902)是一种 JSON 格式的补丁文档,答应客户端声明式地修改 JSON 资源。JsonPatch 提供了以下操作:
add:添加一个新值
remove:删除一个字段
replace:替换一个字段的值
move:移动一个值
copy:复制一个值
test:测试一个值是否符合预期
在 ASP.NET Core Web API 中使用 JsonPatch

安装依靠

JsonPatch 已内置于 Microsoft.AspNetCore.Mvc.NewtonsoftJson,你需要确保你的项目引用了该包:
  1. builder.Services.AddControllers().AddNewtonsoftJson();
复制代码
创建 API 控制器

假设我们有一个 Product 类:
  1. public class Product
  2. {
  3.     public int Id { get; set; }
  4.     public string Name { get; set; }
  5.     public decimal Price { get; set; }
  6. }
复制代码
然后,创建 ProductsController 处理 PATCH 哀求:
  1. [ApiController]
  2. [Route("api/[controller]")]
  3. public class ProductsController : ControllerBase
  4. {
  5.     private static List<Product> _products = new()
  6.     {
  7.         new Product { Id = 1, Name = "Laptop", Price = 1200 },
  8.         new Product { Id = 2, Name = "Mouse", Price = 25 }
  9.     };
  10.     [HttpPatch("{id}")]
  11.     public IActionResult Patch(int id, [FromBody] JsonPatchDocument<Product> patchDoc)
  12.     {
  13.         var product = _products.FirstOrDefault(p => p.Id == id);
  14.         if (product == null)
  15.         {
  16.             return NotFound();
  17.         }
  18.         patchDoc.ApplyTo(product, ModelState);
  19.         if (!ModelState.IsValid)
  20.         {
  21.             return BadRequest(ModelState);
  22.         }
  23.         return Ok(product);
  24.     }
  25. }
复制代码
发送 JsonPatch 哀求

客户端可以发送如下 PATCH 哀求:
  1. [
  2.     { "op": "replace", "path": "/price", "value": 999.99 }
  3. ]
复制代码
示例 cURL 哀求:
  1. curl -X PATCH "http://localhost:5000/api/products/1" \
  2.      -H "Content-Type: application/json" \
  3.      -d '[{"op": "replace", "path": "/price", "value": 999.99}]'
复制代码
处理 JsonPatch 可能遇到的问题

确保 JSON 格式精确

JsonPatch 语法容易出错,比如路径格式不精确或缺少 op。建议使用 Postman 或 cURL 举行调试。
处理 ModelState 错误

如果 patchDoc.ApplyTo(product, ModelState); 返回错误,应该返回 BadRequest(ModelState) 并提供详细的错误信息。
结论

JsonPatch 提供了一种优雅的方式来举行部分更新,制止了 PUT 需要传输整个对象的冗余。合理使用 JsonPatch,可以提高 API 的机动性和效率。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

圆咕噜咕噜

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表