在图表 api 中使用 GUID 获取共享点列表项
Getting a sharepoint listitem using GUID in graph api
我们需要将文档上传到 SharePoint Online 列表,然后向该文档添加一些可搜索的属性。我们正在使用 Microsoft Graph 上传文档。
由于我们需要能够根据不同的条件搜索文档,因此我们将文档上传到列表中。
这是请求的快照:
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
,但到目前为止,我们尝试过的每一种方法都以失败告终。
我们已尝试使用上述回复中提到的 id
和 name
字段,但得到的是 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'
我们在哪里失去它?
要检索 item
,您需要将 id
包含在 URL 本身中:
/sites/{id}/lists/{id}/items/01JSWLMSD5CVXUILHDNGLWP2WGNNGDEG2?$expand=fields
我还建议使用 Microsoft Graph Client Library for .NET 而不是使用 HttpClient
。
好的,我们可以将项目添加到 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 指出尝试使用驱动器 ID 来获取使用 GUID 的项目。我们现在处于绿色状态:)
我们需要将文档上传到 SharePoint Online 列表,然后向该文档添加一些可搜索的属性。我们正在使用 Microsoft Graph 上传文档。
由于我们需要能够根据不同的条件搜索文档,因此我们将文档上传到列表中。
这是请求的快照:
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
,但到目前为止,我们尝试过的每一种方法都以失败告终。
我们已尝试使用上述回复中提到的 id
和 name
字段,但得到的是 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'
我们在哪里失去它?
要检索 item
,您需要将 id
包含在 URL 本身中:
/sites/{id}/lists/{id}/items/01JSWLMSD5CVXUILHDNGLWP2WGNNGDEG2?$expand=fields
我还建议使用 Microsoft Graph Client Library for .NET 而不是使用 HttpClient
。
好的,我们可以将项目添加到 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 指出尝试使用驱动器 ID 来获取使用 GUID 的项目。我们现在处于绿色状态:)