0

我正在尝试使用 Graph API 扩展 MS Teams 驱动器(SharePoint 文档库)的所有项目。

我可以访问团队(组),但无法直接展开 Items 集合。如果可以的话那就太好了,所以我不需要另一个查询(性能!)。

根据文档,有 $expand= 选项,在 C# 中我有 Expand() 扩展方法。不幸的是,我找不到任何有关如何使用它的工作示例。好吧,官方文档中有一个例子:

 string messageId = "<guid>";
 Message message = await graphClient.Me.Messages[messageId]
            .Request()
            .Expand("attachments")
            .GetAsync();

但我无法成功复制它。该属性应该是“Items”,所以我想我应该使用小写的“items”(但我也尝试使用“Items”)。

这是teamsDrive,当我不展开任何内容时,您会看到属性为“Null”(它应该有项目,库中存在文档):

teamDrive
{Microsoft.Graph.Drive}
Activities [IDriveActivitiesCollectionPage]:null
AdditionalData [IDictionary]:Count = 3
Bundles [IDriveBundlesCollectionPage]:null
CreatedBy:{Microsoft.Graph.IdentitySet}
CreatedByUser [User]:null
CreatedDateTime:{30/05/2020 23:46:46 +00:00}
Description [string]:""
DriveType [string]:"documentLibrary"
ETag [string]:null
Following [IDriveFollowingCollectionPage]:null
Id [string]:"b!QXf1ydGT80WWzfKB0A5IvAkI2isDR2NEh9jgSseDzmFpXz0eAriVS6TXSBEiZhVP"
Items [IDriveItemsCollectionPage]:null
LastModifiedBy [IdentitySet]:null
LastModifiedByUser [User]:null

所以,我尝试了以下方法:

var teamDrive = await graphClient.Groups[group.Id].Drive.Request().Expand("items").GetAsync();

但这给了我一个例外:

Status Code: BadRequest
Microsoft.Graph.ServiceException: Code: invalidRequest
Message: The request is malformed or incorrect.
Inner error:
    AdditionalData:
    request-id: 93ab7efd-0a33-4ff0-800e-d7e95acd8eb4
    date: 2020-06-17T08:41:39
ClientRequestId: 93ab7efd-0a33-4ff0-800e-d7e95acd8eb4

   at Microsoft.Graph.HttpProvider.SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)

我正在使用带有Microsoft.Graph.Beta NuGet(版本0.18.0-preview - 最新版本)。

请注意,我在此请求中没有使用任何选择或过滤语句,因为其他人提到扩展时不允许这样做:扩展和过滤 MS Graph API 不起作用

4

1 回答 1

0

好的,我发现我的请求有什么问题。

Items只有当我想访问单个项目时,才能使用该集合。当我想访问项目集合(集合的所有项目)时,我必须展开Root驱动器的属性。然后,此Root属性具有Children包含驱动器根文件夹内的项目的属性(注意:它不包含文档库的所有项目,仅包含顶级文件夹的项目)。

所以基本上这意味着,我可以使用:

var teamDrive = await graphClient.Groups[group.Id].Drive.Request().Expand(d => d.Root).GetAsync();

然后可以通过以下方式遍历孩子: foreach(var childItem in teamDrive.Root.Children) { ... }

以下线程有助于找到解决方案:

于 2020-06-17T09:39:41.820 回答