我们需要将文档上载到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
,但到目前为止,我们尝试的每个途径都导致了失败。
我们已尝试使用上述响应中提到的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'
我们在哪里失去它?
答案 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。我们现在是绿色的:)