1. 文章目的

随着WebApiClient的不断完善,越来越多开发者选择WebApiClient替换原生的HttpClient,本文将介绍使用WebApiClient来完成JsonPatch提交的新特性。

2. json patch介绍

在服务端WebApi开发的时候,如果设计一个更新登录用户的个人信息的接口,用户能更新昵称、密码、生日、性别等N多个字段,但用户在实际使用中,可能是更新其中的一个或不确定多个字段。开发者往往会为难:对于客户端没有更新到的字段,应该设置为什么值呢?一种是让客户端从服务器同步后再更新相关字段,一种是不更新的字段设置为null,服务器收到null的字段不更新,但这个还是有歧义(要更新为null的情况)。

json patch是为客户端能够局部更新服务端已存在的资源而设计的一种标准交互,在RFC6902里有详细的介绍json patch,通俗来讲有以下几个要点:

  1. 使用HTTP PATCH请求方法;

  2. 请求body为描述多个opration的数据json内容;

  3. 请求的Content-Type为application/json-patch+json;

以下为一个json patch请求的数据包:

op为操作的意思,分为以下几种:

  1. add 添加:{“op”: "add", "path": "/xxx", "value": "xxx"},如果该属性不存,那么就添加该属性,如果属性存在,就改变属性的值。

  2. remove 删除:{“op”: "remove", "path": "/xxx"},删除某个属性,或把它设为默认值(例如空值)。

  3. replace 替换:{“op”: "replace", "path": "/xxx", "value": "xxx"},改变属性的值,也可以理解为先执行了删除,然后进行添加。

  4. copy 复制:{“op”: "copy", "from": "/xxx", "path": "/yyy"},把某个属性的值赋给目标属性。

  5. remove 移动:{“op”: "move", "from": "/xxx", "path": "/yyy"},把源属性的值赋值给目标属性,并把源属性删除或设成默认值。

  6. test测试:{“op”: "test", "path": "/xxx", "value": "xxx"},测试目标属性的值和指定的值是一样的。

4. Asp.net mvc接收JsonPatch

Asp.net mvc,可以使用JsonPatchDocument类型来处理json patch内容,JsonPatchDocument可以将操作行为应用到目标实例里,得到操作之后的数据内容。

5. WebApiClient提交JsonPatch

在WebApiClient也提供一个JsonPatchDocument类型,该类型实现了IApiParameterable接口,在http请求之后,会执行BeforeRequestAsync方法,完成组装body的多个opration的数据json内容,使用方法如下:

6. 结束语

博主为WebApiClient库的作者,本文向读者介绍了JsonPatch的基本知识,以及如何在WebApiClient提交JsonPatch,欢迎大家给WebApiClient提建议。

相关文章:

  • WebApiClient的接口输入验证

  • WebApiClient百度地图服务接口实践

  • 使用WebApiClient请求和管理Restful Api

  • .net的retrofit--WebApiClient底层篇

原文地址:https://www.cnblogs.com/kewei/p/9431349.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

WebApiClient的JsonPatch局部更新相关推荐

  1. ES使用脚本进行局部更新的排错记录

    初学Elasticsearch,在按照<Elasticsearch服务器开发(第2版)>进行学习的过程中,在P17页中1.4.5 更新文档小节,使用脚本对文档进行局部更新的时候遇到了如下报 ...

  2. es中document的主键id及局部更新

    很多介绍es的文章,都会说一下lucene的不足,其中两条有迷惑: 1. lucene的document没有全局唯一的主键id 2. lucene不支持更新. 疑惑点1:没有主键id. 可以用luce ...

  3. 遥感影像图斑更新底图、影像局部更新

    遥感影像图斑更新底图.影像局部更新 图斑更新底图.影像局部更新 操作步骤 1.加载需要处理的数据 2.生成镶嵌线 3.匀色处理 4.输出结果 图斑更新底图.影像局部更新 当影像部分区域需要更新替换时, ...

  4. es数据频繁的更新_Elasticsearch之更新(全部更新和局部更新)

    前面的基础, 首先,明确一个概念,es包括全部更新和局部更新! ES全部更新 ES可以使用PUT或者POST对文档进行更新(全部更新),如果指定ID的文档已经存在,则执行更新操作. 比如,我这里,id ...

  5. __doPostBack实现updatepanel的局部更新

    调用方法如下: __doPostBack("UpdataPanel1","")来实现名为UpdatePanel1的更新

  6. ajax绑定事件页面重复提交,Ajax局部更新导致JS事件重复触发问题的解决方法

    如果在页面中包含一个ajax更新的列表,那么需要小心非动态更新部分的事件处理. 以带有公共工具栏的列表界面为例: | Menu1 | Menu2 --------------------------- ...

  7. 重磅! flutter视图局部更新

    新建一个flutter工程, 以flutter框架给我们自动生成的代码为例, 当我们点击按钮更新记数_counter时,最终是通过调用State<T>.setState来更新视图的: se ...

  8. 使用ajax局部更新Razor页面

    Razor功能非常强大,但是本身并不能做到无刷新,所以需要配合ajax使用 本文就做一个简单例子,实现Razor配合ajax做到局部刷新. 首先,我们创建一个MVC项目 让我们创建一个简单的Contr ...

  9. 【Web前端】AJAX局部更新网页

    使用XMLHttpRequest(XHR)更新部分网页内容 实现效果 <!DOCTYPE html> <html lang="en"> <head&g ...

最新文章

  1. SQL语句中 left join 后用 on 还是 where,区别大了!
  2. linux_磁盘配额
  3. 用Tcl定制Vivado设计实现流程
  4. 小程序的项目结构设计
  5. Android --- 夜神模拟器中没有图片怎么办?夜神模拟器中怎么导入图片?
  6. html 关键帧作标记,关键帧有什么用?
  7. 阿里云对象存储OSS之通过URL形式进行图片处理
  8. mac启动mysql,apache,php
  9. android 9宫格输入法,Android/WP原生九宫格输入法对比_诺基亚 Lumia 925_手机iOS频道-中关村在线...
  10. VScode快捷键(持续更新)
  11. mysql导出表结构word文档_如何将Word文档导出为长图片格式
  12. api 原生hbase_HBase实践 | BDSHBase数据迁移同步方案的设计与实践
  13. 腾讯视频TS文件转MP4
  14. opencv-qr码识别
  15. 三维重建基本流程,搭建一个龙的demo
  16. All in 区块链的百度昨日发布了白皮书,说了些什么?
  17. Vue中阿拉伯数字与汉字的相互转换
  18. 罗马数字 in wiki
  19. linux中用参数代替键盘输入,linux shell在while中用read从键盘输入的实现
  20. 【Java】java转换可播放的QQ/微信高质量语音格式,mp3/wav转silk格式(高质量音频),mp3转换amr格式(低质量音频),mp3/wav转pcm(非语音格式)

热门文章

  1. stop-hbase.sh一直处于等待状态
  2. Mybatis-Generator(MBG)教程与Idea的MBG插件
  3. JavaScript开发的技巧
  4. Redis集群(一):集群搭建
  5. Building JavaScript Games for Phones Tablets and Desktop(3)-创造一个游戏世界
  6. Oracle应用集群详解
  7. 使用 NetCoreBeauty 优化 .NET CORE 独立部署目录结构
  8. .NET6 如期⽽⾄
  9. Windows 11 小技巧- WSL运行本地GPU算力
  10. Ant Design Blazor 组件库的路由复用多标签页介绍