在图api中使用GUID获取sharepoint listitem

时间:2018-02-27 14:58:22

标签: c# microsoft-graph sharepoint-online

我们需要将文档上载到SharePoint Online列表,然后向文档添加一些可搜索的属性。我们使用Microsoft Graph上传文档。

由于我们需要能够根据不同的标准搜索文档,因此我们将文档上传到List。

以下是请求的快照:

string requestUrl = "https://graph.microsoft.com/v1.0/drives/" +
    driveID +
    "/items/root:/" +
    fileName +
    ".docx:/content";

HttpClient client = new HttpClient();

HttpRequestMessage message =
    new HttpRequestMessage(HttpMethod.Put, requestUrl);
message.Headers.Authorization =
    new AuthenticationHeaderValue("Bearer", accessToken);

message.Content = new StreamContent(requestContent);
client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type",
    "application/json; odata=verbose; charset=utf-8");

HttpResponseMessage response = await client.SendAsync(message);

当文档上传时,我们会收到包含GUID和文档名称的响应。

{
  "createdDateTime": "2018-02-27T10:44:02Z",
  "eTag": "\"{446F157D-ED2C-4C1B-BB3F-56897A6190DA},1\"",
  "id": "01JSWLMSD5CVNHFLHNDNGLWP2WGNNGDEG2",
  "lastModifiedDateTime": "2018-02-27T10:44:02Z",
  "name": "2018-02-27 15.43.55.7268PM.docx"
}

当我们试图获取该文档以添加填充列表中的其他列时,就会出现这个诀窍。

我们可以使用列表中文档的id字段来获取文档,但是当我们上传文档时,id不会作为响应的一部分返回,因此不能将该值用于我们的请求。

我们的挑战是使用我们从JSON响应中获取的字段来获取ListItem,但到目前为止,我们尝试的每个途径都导致了失败。

我们已尝试使用上述响应中提到的idname字段,但收到HTTP 400响应。以下是我们在多种变体中尝试过的请求。

.../lists/My Library/items?expand=fields&filter=fields/name eq '2018-02-27 15.43.55.7268PM.docx'

...:/lists/My Library/items?filter=id eq '01JSWLMSD5CVXUILHDNGLWP2WGNNGDEG2' 

我们在哪里失去它?

2 个答案:

答案 0 :(得分:2)

要检索item,您需要在网址中加入id

/sites/{id}/lists/{id}/items/01JSWLMSD5CVXUILHDNGLWP2WGNNGDEG2?$expand=fields

我还建议您使用Microsoft Graph Client Library for .NET而不是使用HttpClient滚动自己。{/ p>

答案 1 :(得分:1)

好的,我们将项目添加到SharePoint列表的唯一方法是将其添加为驱动器项。因此,我们获取的GUID是驱动项而不是列表项。要更新列表项元数据或更新列表项的字段,您需要获取列表项ID。非常感谢,到目前为止,Microsoft维护了驱动器项目的“SharePointIds”资源类型。您需要做的是使用上载文档后获得的驱动器驱动器项GUID搜索此资源,然后在响应中使用“list item”id的值来更新列表项值。以下是您将获取驱动器项的SharePointId的请求的语法。

    https://graph.microsoft.com/v1.0/drives/MyDriveId/items/MyItemGUID?$select=sharepointids 

这给了我以下回复,其中包括列表项ID:

    {
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#drives('b%21Fxup9FZ-HUOeolxFVUS8xtUFzOnGdmJFmOu-plkSayoX0IRAx4QQLGVWwqhin-F')/items(sharepointIds)/$entity",
"@odata.etag": "\"{B7B82A72-72EF-414A-8C1E-0A26896HDC79},6\"",
"sharepointIds": {
    "listId": "11425fa8-1e03-4010-b195-5b0as83a7f85",
    "listItemId": "1178",
    "listItemUniqueId": "b7b82a72-72ef-414a-8c1e-0a24532ddc79",
    "siteId": "f4a91b17-7e56-431d-9ea2-5c589644bcc6",
    "siteUrl": "https://Mywesite.com/sites/MyLibrary",
    "webId": "e9cc05d5-76c6-4562-98eb-bea33a98742c"
} } 

非常感谢@marc指向尝试使用GUID获取项目的驱动器ID。我们现在是绿色的:)