WebApiClient的JsonPatch局部更新

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请求的数据包:

640?wx_fmt=png

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可以将操作行为应用到目标实例里,得到操作之后的数据内容。

640?wx_fmt=png

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

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SPOJ1812 LCS2

SPOJ1812 LCS2 题意:给n个串,求最长公共子串 做法:对第一个串建\(SAM\),拿剩余的串类似于求\(LCS\)的在上面跑,对于当前这个串,求出可以到达每个状态的最长子串长度,然后,每个状态对…

【每日一题】4月1日题目 Rinne Loves Edges

牛客网 链接:https://ac.nowcoder.com/acm/problem/22598 来源:牛客网 题目: 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 131072K,其他语言262144K 64bit IO Format:%lld 题目描述 Rinne 最近…

【bfs】神殿(jzoj 2296)

神殿 jzoj 2296 题目大意: 用一个n∗mn*mn∗m的矩阵,每个单位都是一个1∗11*11∗1的房间,房间的四个方向只有某些方向有门(说明如下图),要从一个房间走向相邻的房间(算一个单位时间&#xff…

P7077-函数调用【拓扑排序,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P7077 题目大意 有一些函数分为三种 让一个位置的数加上一个数让所有数乘上一个数按顺序执行一些函数 然后不会有环,按顺序调用一些函数,求最后每个位置的数。 解题思路 我们发现对于一个乘操作其实…

如何在本地数据中心安装Service Fabric for Windows集群

概述首先本文只是对官方文档(中文,英文)的一个提炼,详细的安装说明还请仔细阅读官方文档。虽然Service Fabric的官方名称往往被加上Azure,但是实际上(估计很多人不知道)Service Fabric可以安装到…

Codeforces 1091E

Codeforces 1091E 题意:给定n个点的度数,请你添加第n1个点,输出所有可能的第n1个点的度数 做法:1. 查看链接知道了下面这个定理 A sequence of non-negative integers $ d_1\geq\cdots\geq d_n$ can be represented as the degree…

【每日一题】4月6日数码

题目:数码 来源:美团2017年CodeM大赛-资格赛 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 32768K,其他语言65536K 64bit IO Format:%lld 题目描述 给定两个整数 l 和 r ,对于所有满足1 ≤ l ≤ …

【数学】异或(jzoj 2298)

异或 jzoj 2298 题目大意: 定义nbnbnb数对a,ba,ba,b为gcd(a,b)abgcd(a,b)a^bgcd(a,b)ab的数对,问不大于nnn的nbnbnb数对有多少对 输入样例#1 12输出样例#1 8输入样例#2 123456输出样例#2 214394数据范围 测试点数据规模11021003100045000510000…

Codeforces 235C

Codeforces 235C 题目:给定一主串\(S\),\(n\)次询问,每次询问串\(t\)的所有循环移位串的出现的次数和 做法:建\(SAM\),对于询问串\(t\),将他复制一份放在后边,在后缀自动机上匹配,如…

Asp.Net Core实战

序言使用.NET Core,团队可以更容易专注的在.net core上工作。比如核心类库(如System.Collections)的更改仍然需要与.NET Framework相同的活力,但是ASP.NET Core或Entity Framework Core可以更轻松地进行实质性更改,而不…

CF966E-May Holidays【虚树,分块】

正题 题目链接:https://codeforces.ml/contest/966/problem/E 题目大意 nnn个点的一棵树,每个点有一个tit_iti​,每次修改一个点是否为关键点,每次修改完后要求有多少个点满足该点不是关键点且子树中关键点数量超过tit_iti​。 解题思路 对…

DFS序讲解

我们经常会遇到树的问题,但树是非线性的结构,操作起来始终还是麻烦,如果我们能把树改造成线性结构,有什么方法?对,就是今天要讲的DSF序; dfs序呢,就是把一棵树区间化,我们…

纪中C组模拟赛总结(2019.8.9)

成绩: 注:rankrankrank是有算其他dalaodalaodalao的 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4111lyflyflyf250250250100100100100100100202020303030777hkyhkyhky200200200100100100100100100000000424242cyzcyzcyz1201201201…

虚树(Virtual Tree)学习笔记

虚树(Virtual Tree)学习笔记 一道题目(BZOJ-2286消耗战) Description 在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达。现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足够多…

利用Asp.Net Core的MiddleWare思想处理复杂业务流程

最近利用Asp.Net Core 的MiddleWare思想对公司的古老代码进行重构,在这里把我的设计思路分享出来,希望对大家处理复杂的流程业务能有所帮助。背景一个流程初始化接口,接口中根据传入的流程类型,需要做一些不同的工作。1.有的工作是…

P4284-[SHOI2014]概率充电器【树形dp,换根法,数学期望】

正题 题目链接:https://www.luogu.com.cn/problem/P4284 题目大意 nnn个点的一棵树,每个点有pip_ipi​概率通电,每个边有一定概率可以导电。求期望有电的节点个数。 解题思路 发现考虑通电概率很难,所以我们可以考虑不通电的概率。 如果只…

【每日一题】4月7日题目精讲 树

树 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 131072K 其他语言262144K 64bit IO Format:%lld 题目描述 shy有一颗树,树有n个结点。有k种不同颜色的染料给树染色。一个染色方案是合法的,当且仅当对于所有相同颜色的点…

【贪心】Radar Installation(poj 1328)

Radar Installation poj 1328 题目大意: 在平面直角坐标系的一二象限上有n个小岛,现在让你在x坐标上布置雷达,每个雷达可以侦测以它为原心,半径为m的圆内的所有小岛,现在问侦测完这n个小岛最少要多少个雷达 输入样…

HDU5765 Bonds (高维前缀和)

HDU5765 Bonds (高维前缀和) 题意&#xff1a;\(n(n<20)\)个点\(m\)条边无向图&#xff0c;求每条边出现在多少个\(Bond\)里。一个图的\(cut\)指&#xff0c;对于一个图\(G\)的边集的某个子集\(E\)&#xff0c;如果删除\(E\)中的所有边&#xff0c;原图不连通。一个图的\(Bo…

F# 4.5提供Spans、Match!等特性

F# 4.5预览版现已发布&#xff0c;其中提供了一系列新特性&#xff0c;包括对.NET Core 2.1的新原生类型Span<T>的支持、新关键字Match!等。类型Span意在实现底层代码指针操作的安全性和可预测性&#xff0c;这可使得很多情况下不必再分配内存&#xff0c;进而改进了内存…