C# 如何在RESTfulWebAPI(.NET/JSON/EF6)服务器端实现部分更新(补丁)
我一直在从事一个WebAPI项目(Restful),其中模型(和相应的表)的大小非常大,因此绝对需要部分更新 我已经回顾了模型的一个子部分的POST选项,但是考虑到模型有大量字段(和自定义字段),我认为公开这么多URI是不可行的 我知道,使用PATCH verb,我可以允许客户端进行部分更新,但我正在努力概念化如何在服务器端捕获相同的内容,然后找出发生了什么变化(post JSON到模型转换),以便区分哪些字段被客户端显式设置为NULL(因为她想更新字段)与由于没有更新而为空的内容相比 我应该使用自定义映射器吗?还是应该在字段级别创建泛型属性和捕获状态 我已经搜索过(现在仍然在搜索)网络和SOF.com网站,但我没有找到任何权威/具体的信息,所以我需要向专业人士寻求反馈C# 如何在RESTfulWebAPI(.NET/JSON/EF6)服务器端实现部分更新(补丁),c#,json,rest,entity-framework-6,patch,C#,Json,Rest,Entity Framework 6,Patch,我一直在从事一个WebAPI项目(Restful),其中模型(和相应的表)的大小非常大,因此绝对需要部分更新 我已经回顾了模型的一个子部分的POST选项,但是考虑到模型有大量字段(和自定义字段),我认为公开这么多URI是不可行的 我知道,使用PATCH verb,我可以允许客户端进行部分更新,但我正在努力概念化如何在服务器端捕获相同的内容,然后找出发生了什么变化(post JSON到模型转换),以便区分哪些字段被客户端显式设置为NULL(因为她想更新字段)与由于没有更新而为空的内容相比 我应该使
谢谢你的帮助 KevinDockx为MVC创建了处理补丁的插件。这里是nuget链接 此插件是.NET的RFC 6902实现 基本上,当您从客户端发送json补丁时,您必须构建操作数组
[
{ "op": "add", "path": "/foo", "value": "bar"},
{ "op": "replace", "path": "/baz", "value": "boo" }
]
当然,这只在您想要遵循规范时才重要。在其他情况下(我指的是你自己对补丁如何工作的理解),你必须实现你的自定义逻辑
编辑
就个人而言,我发现在我的用例中只有“替换”操作是有用的,因为我的DTO是扁平的。KevinDockx创建了MVC插件来处理补丁。这里是nuget链接 此插件是.NET的RFC 6902实现 基本上,当您从客户端发送json补丁时,您必须构建操作数组
[
{ "op": "add", "path": "/foo", "value": "bar"},
{ "op": "replace", "path": "/baz", "value": "boo" }
]
当然,这只在您想要遵循规范时才重要。在其他情况下(我指的是你自己对补丁如何工作的理解),你必须实现你的自定义逻辑
编辑
我个人发现,由于DTO的扁平性,在我的用例中只有“替换”操作是有用的