Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在RESTfulWebAPI(.NET/JSON/EF6)服务器端实现部分更新(补丁)_C#_Json_Rest_Entity Framework 6_Patch - Fatal编程技术网

C# 如何在RESTfulWebAPI(.NET/JSON/EF6)服务器端实现部分更新(补丁)

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(因为她想更新字段)与由于没有更新而为空的内容相比 我应该使

我一直在从事一个WebAPI项目(Restful),其中模型(和相应的表)的大小非常大,因此绝对需要部分更新

我已经回顾了模型的一个子部分的POST选项,但是考虑到模型有大量字段(和自定义字段),我认为公开这么多URI是不可行的

我知道,使用PATCH verb,我可以允许客户端进行部分更新,但我正在努力概念化如何在服务器端捕获相同的内容,然后找出发生了什么变化(post JSON到模型转换),以便区分哪些字段被客户端显式设置为NULL(因为她想更新字段)与由于没有更新而为空的内容相比

我应该使用自定义映射器吗?还是应该在字段级别创建泛型属性和捕获状态

我已经搜索过(现在仍然在搜索)网络和SOF.com网站,但我没有找到任何权威/具体的信息,所以我需要向专业人士寻求反馈


谢谢你的帮助

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的扁平性,在我的用例中只有“替换”操作是有用的