如何在休息服务中更新共享点2013列表项

时间:2016-05-04 08:49:57

标签: rest sharepoint sharepoint-2010 sharepoint-2013 sharepoint-workflow

这是我更新列表项的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,我为什么会收到错误?

1 个答案:

答案 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以获取更多信息。