标签:效率 net 科技 通过 https ISE 更新 spn ide
JSON Patch 是一种格式,用于指定要应用于资源的更新。 JSON Patch文档有一个** 操作数组。 每个操作标识一种特定类型的更改。 此类更改的示例包括添加数组元素或替换属性值。
PUT 和 PATCH 方法用于更新现有资源。 它们之间的区别是,PUT 会替换整个资源,而PATCH 仅指定更改。
参看地址:https://docs.microsoft.com/zh-cn/aspnet/core/web-api/jsonpatch?view=aspnetcore-3.1
{
"baz": "qux",
"foo": "bar"
}
[
{ "op": "replace", "path": "/baz", "value": "boo" },
{ "op": "add", "path": "/hello", "value": ["world"] },
{ "op": "remove", "path": "/foo" }
]
在上述 JSON 中:
{
"baz": "boo",
"hello": ["world"]
}
下表显示了 JSON 修补程序规范中定义的支持操作:
| Operation | 说明 |
|---|---|
| add | 添加属性或数组元素。 对于现有属性:设置值。 |
| remove | 删除属性或数组元素。 |
| replace | 与在相同位置后跟 add 的 remove 相同。 |
| move | 与从后跟 add 的源到使用源中的值的目标的 remove 相同。 |
| copy | 与到使用源中的值的目标的 add 相同。 |
| test | 如果 path 处的值 = 提供的 value,则返回成功状态代码。 |
Microsoft.AspNetCore.JsonPatch
在API 控制器中,JSON Patch操作方法:
HttpPatch特性标签JsonPatchDocument<T>,通常带有 [FromBody]ApplyTo()方法应用更改[Route("")]
[HttpPatch]
public async Task<IActionResult> Patch([FromBody]JsonPatchDocument<AppUser> jsonPatch)
{
if (jsonPatch != null)
{
var user = await _userContext.Users.FirstOrDefaultAsync(s => s.Id == UserIdentity.UserId);
jsonPatch.ApplyTo(user);
_userContext.SaveChanges();
return Json(user);
}
else
{
return BadRequest(ModelState);
}
}
PATCHContent-Type:application/json[
{
"op":"replace",
"path":"/Company",
"value":"上海无敌土豆科技有限公司"
},
{
"op":"replace",
"path":"/Title",
"value":"小土豆"
}
]
[
{
"op":"replace",
"path":"/Properies",
"value":
[
{
"Key":"fin_stage",
"Value":"A+轮",
"Text":"A+轮"
},
{
"Key":"fin_stage",
"Value":"C轮",
"Text":"C轮"
}
]
}
]
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "|fcde218-4047aa49553937bd.",
"errors": {
"$": [
"The JSON value could not be converted to Microsoft.AspNetCore.JsonPatch.JsonPatchDocument`1[User.API.Entity.Models.AppUser]. Path: $ | LineNumber: 0 | BytePositionInLine: 1."
]
}
}
遇到上述错误的原因为程序无法正常解析该json,因为没有找到NewtonsoftJson包的依赖;关于微软为何要移除该包的依赖,主要是为了提升执行效率;System.Text.Json作为微软内置json处理,效率更高更快,但是目前大部分主流的包还是使用的NewtonsoftJson开发
官方文档描述如下:
ASP.NET Core 3.0 之前的版本中,默认设置使用通过 Newtonsoft.Json 包实现的 JSON 格式化程序。 在 ASP.NET Core 3.0 或更高版本中,默认 JSON 格式化程序基于 System.Text.Json。 Newtonsoft.Json通过安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet 包并在中进行配置,可获得对基于的格式化程序和功能的支持 Startup.ConfigureServices 。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddNewtonsoftJson();
}
标签:效率 net 科技 通过 https ISE 更新 spn ide
原文地址:https://www.cnblogs.com/imtudou/p/13664084.html