摘要:在现代 Web API 开发中,我们经常需要对资源进行部分更新(Partial Update)。
在现代 Web API 开发中,我们经常需要对资源进行部分更新(Partial Update)。
传统的PUT请求会要求发送整个对象,而patchASP.NET Core 提供了JsonPatchDocumentJsonPatch(基于 RFC 6902)是一种 JSON 格式的补丁文档,允许客户端声明式地修改 JSON 资源。JsonPatch 提供了以下操作:
remove:删除一个字段
replace:替换一个字段的值
move:移动一个值
copy:复制一个值
test:测试一个值是否符合预期
在 ASP.NET Core Web API 中使用 JsonPatch
JsonPatch已内置于Microsoft.AspNetCore.Mvc.NewtonsoftJson,你需要确保你的项目引用了该包:builder.Services.AddControllers.AddNewtonsoftJson;创建 API 控制器假设我们有一个Productpublic class Product{ public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; }}然后,创建ProductsControllerPATCH [HttpPatch("{id}")] public IActionResult Patch(int id, [FromBody] JsonPatchDocument patchDoc) { var product = _products.FirstOrDefault(p => p.Id == id); if (product == ) { return NotFound; } patchDoc.ApplyTo(product, ModelState); if (!ModelState.IsValid) { return BadRequest(ModelState); } return Ok(product); }}发送 JsonPatch 请求客户端可以发送如下请求:[ { "op": "replace", "path": "/price", "value": 999.99 }]示例 cURL 请求:
curl -X PATCH "http://localhost:5000/api/products/1" \ -H "Content-Type: application/json" \ -d '[{"op": "replace", "path": "/price", "value": 999.99}]'JsonPatch 语法容易出错,比如路径格式不正确或缺少op。建议使用 Postman 或 cURL 进行调试。处理 ModelState 错误如果返回错误,应该返回BadRequest(ModelState)并提供详细的错误信息。JsonPatch提供了一种优雅的方式来进行部分更新,避免了PUT需要传输整个对象的冗余。合理使用JsonPatch,可以提高 API 的灵活性和效率。来源:opendotnet
免责声明:本站系转载,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!