0

更新共享点2013列表项这是我的休息服务更新列表项如何休息服务

URL: 

https://site/_api/lists/getbytitle('Test')/items(49) 

Header 
    X-RequestDigest : some unique id from contextinfo post service 
    Content-Type  : application/json;odata=verbose 
    X-HTTP-Method  : MERGE 
    IF-MATCH   : 49 

Body 
    {"__metadata":{"type":"SP.Data.TestListItem"},"Title":"Title all1","Option1":"Updated 2"} 

当我运行在邮递员这个网址我得到一个错误“请求ETag值“__metadata。 etag'与对象的ETag值'不匹配'\“8 \”'“

但是,如果我将标头中的IF-MATCH值更改为*,它会正确更新。为什么我在使用etag时遇到错误?

回答

1

您正在错误地使用ETag。该ETag将对应于物品的版本而不是物品的ID

测试此功能的最佳方法是对项目执行获取请求并查看ETag属性的元数据。你会看到类似这样

{"__metadata":{"id":"Web/Lists(guid'xxxxxxxx')/Items(1)","uri":"https://site.sharepoint.com/site/subsite/_api/Web/Lists(guid'xxxxxx')/Items(1)","etag":"\"12\""

通知ETag的的格式。

我想不出有什么好的理由在更新项目的情况下使用IF-MATCH作为特定的ETag。该ID的请求参数应该绰绰有余。当想要PUT,合并或删除某个项目的特定版本时,需要使用ETags检查版本控制。

检查此Working with lists and list items with REST欲知更多信息。