MS Graph API 客户端 - 无法展开以在查询中工作

MS Graph API Client - Cannot get Expand to work in Queries

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

我可以访问团队(组)但无法直接展开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)

我正在将 BETA Graph 端点(https://graph.microsoft.com using an access token retrieved from https://login.microsoftonline.com/{我们的租户 ID})与 Microsoft.Graph.Beta NuGet 包(版本 0.18.0-preview - 最新版本)一起使用。

请注意,我在此请求中没有使用任何 select 或过滤语句,因为其他人已经提到展开时不允许这样做:Expanding and Filtering MS Graph API Does Not Work

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

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

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

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

然后可以迭代 children : foreach(var childItem in teamDrive.Root.Children) { ... }

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