这是我更新列表项的Rest服务
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"}
当我在post man中运行此URL时,我收到错误“请求ETag值'__ metadata.etag'与对象的ETag值不匹配'\”8 \“'”
但如果我将标题中的IF-MATCH值更改为*,则表示正确更新。如果使用etag,我为什么会收到错误?
答案 0 :(得分:1)
您正在错误地使用ETag。 ETag将对应项目的版本而不是项目的 ID 。
测试此方法的最佳方法是对项目执行get请求并查看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,MERGE或DELETE项目的特定版本时,需要使用ETag检查版本控制。
查看此Working with lists and list items with REST以获取更多信息。