.netcore 3.1 运用 Json Patch 时的常见问题 电脑版发表于:2020/9/8 14:40 ![.netcore](https://img.tnblog.net/arcimg/hb/c857299a86d84ee7b26d181a31e58234.jpg ".netcore") >#.netcore 3.1 运用Json Patch [TOC] tn>JSON Patch是一种使用API显式更新文档的方法。它本身是一种契约,用于描述如何修改文档(例如:将字段的值替换成另外一个值),而不必同时发送其他未更改的属性值。 包:`Microsoft.AspNetCore.JsonPatch` 具体大家可以参考这篇文章:https://www.cnblogs.com/lwqlun/p/10433615.html 在.net Core3 运用 Json Patch 时的常见问题 ------------ >###接收不到来自Body的参数 tn>需要在代码中添加`FromBody`,这样才能接收到。 ```csharp [Route("")] [HttpPatch] public async Task<IActionResult> Patch([FromBody]JsonPatchDocument<AppUser> patch) { var user = await _userContext.Users.SingleOrDefaultAsync(u => u.Id == UserIdentity.UserId); patch.ApplyTo(user); _userContext.Users.Update(user); _userContext.SaveChanges(); return Ok(user); } ``` >###请求400 ![](https://img.tnblog.net/arcimg/hb/6d6ba385f6b841188ea27e35e1a3ff4d.png) tn>访问时请求失败,由于`.netcore`内部使用的是`System.Text.Json`,而大家使用的是`Microsoft.AspNetCore.Mvc.NewtonsoftJson`,所以需要安装这个包。然后在`Startup.cs`中添加`NewtonsoftJson`Json转换中间件。 ```csharp services.AddControllers().AddNewtonsoftJson(); ``` >###用PostMan请求的报文如下 tn>注意在Header那儿, `Content-Type` 应为 `application/json` ![](https://img.tnblog.net/arcimg/hb/afd348cf72864046af43e946b5983c2b.png) ![](https://img.tnblog.net/arcimg/hb/8e3c57322cd9470bb83317f975ca494d.png)