首页 > 其他 > 详细

P32 局部更新 PATCH

时间:2020-03-28 23:14:21      阅读:73      评论:0      收藏:0      [点我收藏+]


技术分享图片

技术分享图片

技术分享图片

技术分享图片

json patch支持的操作,一共有6种
add:就是向资源里面添加值,或者是向数组里面添加一个元素。
技术分享图片

开始写代码


JsonPatchDocument需要我们安装一个库
技术分享图片

技术分享图片

技术分享图片
从employee映射到UpdateDto
技术分享图片
比如说patchDocument如果有一个只读的操作,它add的一个属性,这个属性在C#类里面并不存在,这时候就会报错,或者是它要修改一个只读的属性。这些都会报错。所以说我们需要处理一下这块。
技术分享图片

技术分享图片

技术分享图片
一个替换的操作replace。然后替换的字段是employeeNo。替换后的值是1111122222
技术分享图片
422错误
技术分享图片
这是因为asp.net core 3.0开始他是用的json库,是比较新的json库。新的库实现一些比较核心的功能。很多功能还没有实现。
技术分享图片
下面我们就是用json.net库要替换。
技术分享图片

技术分享图片
再次发送请求204
技术分享图片
查询结果EmployeeNo确实被更改了。但是出现了一个问题。查询结果变成xml的格式了
技术分享图片
headers加上接收的类型。
技术分享图片
但是没写Accept的headers为什么默认返回的是xml格式的呢?
因为默认用的是core自带的json库,但是后来我们加了json.net替换了 它,所以默认优先返回的就是xml格式了。
这我们把json.net的添加 到addXml的前面
技术分享图片
这样不加accept返回的也是xml格式了。
技术分享图片
把名字改成
技术分享图片
技术分享图片
再查询确实被更新了。
技术分享图片
remove操作会把datetime类型设置成默认值
技术分享图片

技术分享图片

Add+copy

技术分享图片
技术分享图片
技术分享图片

处理验证错误

我们先把employeeNo字段的值移除了。 
技术分享图片
返回的是500错误。也就是在Controller的model 绑定环节并没有走。
技术分享图片
为什么没走因为这个类型是JsonPatchDocument而不是我们的UpdateDto类型。
技术分享图片
所以在下面,我们就需要进行手动验证
若果验证失败就返回false,并且错误信息会放在ModelState里面。
技术分享图片

ValidationProblem方法就实现了 ValidateProbleDetails的标准
技术分享图片

技术分享图片
技术分享图片

jsonPatchDocument里面也可能出错。比如说我们想删除一个不存在的字段
技术分享图片
随便传一个字段
技术分享图片
返回500是不对的,因为是客户端引起的错误 ,应该是4开头的。
技术分享图片
如果patchDocument里面有任何的验证错误,就会把ModelState的属性变成false,并且错误信息也会放在里面。
技术分享图片


技术分享图片
也把jsonPatch里面的错误指出了
技术分享图片

处理为什么返回的是400,而不是422错误。

ValidationProblem里面返回的错误信息是手动返回的,
技术分享图片
之前我们自定义了problemDetails的错误格式。
技术分享图片
但是我们这里的ValidationProblem方法并没有采用startup里面配置的ProblemDetails的配置。所以它返回的是400 bad request 而不是422
技术分享图片

而这块在model绑定的时候,那个验证才使用了下面的配置。
技术分享图片

修改返回的格式

重写下ValidationProblem
技术分享图片

技术分享图片
我们最后要返回的是采用startup的配置

技术分享图片

再次发送请求
技术分享图片

局部更新或新增

技术分享图片
先new 一个UpdateDto然后还是把patchDocument里面的值 放到dto里面,把modelState传过去做验证。
技术分享图片
技术分享图片
最后要返回的是employeeDto
技术分享图片

测试


技术分享图片
技术分享图片
把id故意改成9999
技术分享图片

技术分享图片
返回的header里面
技术分享图片
复制headers看看能不能获取这个值
技术分享图片

结束

 

P32 局部更新 PATCH

原文:https://www.cnblogs.com/wangjunwei/p/12589953.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!