RESTful API
PATCH部分更新
部分更新使用PATCH方法完成,它能够由客户端选择要更新资源的属性,因此PATCH的请求正文与PUT不一样。PATCH方法的请求正文使用的是JSON Patch文档格式。JSONPatch是描述JSON文档内容变化的一种特殊的JSON格式文档。它与HTTP PATCH方法结合使用,能够实现对资源的部分更新。关于JSON Patch格式的更多信息,可参考http://jsonpatch.com/

文档由一个数组构成,数组中的每个元素代表一个更改项,每一项包括3项。
op:操作类型
path:对象的属性名
value:对象的值
op的值有6种
add:向对象添加一个属性,或向数组添加一个元素
remove:从对象中移除移除一个属性,或从数据中移除一个元素
replace:为一个属性替换新值
copy:将一个属性的值复制到另一个属性上
move:将一个属性的值”移动“到另一个属性上,原属性的值将被清空
test:测试属性的值是否与指定的值相等
ACCEPT内容协商
客户端指明格式是在其请求消息的消息头中添加Accept项,它的值是一个MIME类型,如application/xml。它的意思是告诉服务端,客户端需要的数据格式是XML格式。服务端在收到这个请求后,如果支持返回此格式的数据,则直接返回指定格式的数据;反之,如果不支持,那么应返回406 Not Acceptable状态码,该状态码的意思是告诉客户端,服务端无法提供此种格式的响应。以上过程称为内容协商。

在ASP.NET Core中默认将ReturnHttpNotAcceptable
设为False,所以无论将Accept改为什么类型,依然只会返回Json。在配置MVC时将此项设为True即可返回406 Not Acceptable.
实现内容协商:
在配置MVC时添加将需要的Formatter即可
services.AddMvc(config =>
{
//对于不支持Accept类型返回406
config.ReturnHttpNotAcceptable = true;
//config.OutputFormatters.Add(new XmlSerializerOutputFormatter());
}).AddXmlSerializerFormatters();
MvcOptions类包括若干属性,其中OutputFormatters和InputFormatters分别是输出Formatter和输入Formatter的集合。在上述代码中,在输出Formatter集合中添加了XmlSerializerOutputFormatter,这样服务器就能够正确地输出XML格式的数据了。
除了常见的XML与JSON格式,如果请求头中的Accept是特殊格式,如CSv (text/csv)或vCard (text/vcard)格式等,若要使服务器能返回相应格式的数据,就需要创建自定义格式的Formatter。自定义Formater应继承自TextOutputFormatter 类或 TextlnputFormatter类,前者用于创建自定义输出Formatter,后者则用于创建自定义输入Formatter。
自定义Formatter参考微软官方文档:ASP.NET Core Web API 中的自定义格式化程序
最后更新于
这有帮助吗?