GraphServiceClient PageItarator 失败并显示“可解析对象不包含集合属性”

Ray*_* A. 3 c# asp.net-core microsoft-graph-sdks microsoft-graph-api graphserviceclient

我想在我的项目中使用 PageIterator,它工作得很好,直到我想从 AzureAD 中取出组成员。无论我做什么,PageIterator 都会失败并显示“The Parsable does not contains a collection property”。

List<User> users = new();
var result = await graphClient.Groups[groupId].Members.GetAsync((requestConfiguration) =>
    {
       requestConfiguration.QueryParameters.Top = 2;
       // I only do this to force pageing, will not be on final version
    });

var pageIterator = PageIterator<User, DirectoryObjectCollectionResponse>
    .CreatePageIterator(graphClient, result,
         (m) =>
         {
             users.Add(m);
             return true;
         });

await pageIterator.IterateAsync();
Run Code Online (Sandbox Code Playgroud)

我的代码强制执行 2 项。这只是因为我绝望地试图找出我的代码出了什么问题。

我对这里出了什么问题一无所知,任何帮助都会很棒。

Tin*_*ang 7

我在我这边重现了您的问题,并更改了代码,如下所示:

var pageIterator = PageIterator<DirectoryObject, DirectoryObjectCollectionResponse>
                .CreatePageIterator(graphClient, result,
                     (m) =>
                     {
                         if (m.OdataType == "#microsoft.graph.group")
                         {
                             return true;
                         }
                         else if (m.OdataType == "#microsoft.graph.user")
                         {
                             users.Add((User)m);
                             return true;
                         }
                         else {
                             return true;
                         }
                     });
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

问题发生在响应类型上。列表成员 APIdirectoryObject将作为响应返回,但在您的代码中,您有PageIterator<User, DirectoryObjectCollectionResponse>导致错误的原因。

顺便说一句,如果我们只想获取用户成员,那么我们可以像这样更改代码:

var result = await graphClient.Groups["group_id"].Members.GraphUser.GetAsync((requestConfiguration) =>
            {
                requestConfiguration.QueryParameters.Top = 1;
            });
            var pageIterator = PageIterator < User, UserCollectionResponse>
                .CreatePageIterator(graphClient, result,
                     (m) =>
                     {
                        users.Add(m);
                        return true;
                     });
Run Code Online (Sandbox Code Playgroud)