Microsoft Graph API 分页无法从 Azure AD 获取所有用户

Dik*_*dhi 4 c# beta microsoft-graph-sdks microsoft-graph-api

我们使用Microsoft Graph API Beta 版本通过以下代码从 Azure AD 检索所有用户。API 在响应中仅返回 100 个用户,并且为了使用分页响应,我们尝试了NextPageRequest属性。但它总是会回报null财产NextPageRequest。因此,它永远不会进入 while 循环来检索其余用户。

测试版 SDK 版本:4.0.1.0

代码:

                List<User> usersList = new List<User>();
                IGraphServiceUsersCollectionPage users = await graphClient.Users.Request().GetAsync();

                // Add the first page of results to the user list
                usersList.AddRange(users.CurrentPage);

                // Fetch each page and add those results to the list
                while (users.NextPageRequest != null)
                {
                    users = await users.NextPageRequest.GetAsync();
                    usersList.AddRange(users.CurrentPage);
                }

                log.Info("Users count: " + usersList.Count.ToString());
                return usersList;
Run Code Online (Sandbox Code Playgroud)

我关注的参考链接:

对此的任何帮助将不胜感激!

Shi*_*rma 12

下面的代码对我来说效果很好。

public static async Task<List<User>> getUsers()
        {
            List<User> usersList = new List<User>();
            graphClient.BaseUrl = "https://graph.microsoft.com/beta";
            IGraphServiceUsersCollectionPage users = await graphClient.Users
                .Request()
                .GetAsync();

            usersList.AddRange(users.CurrentPage);

            while (users.NextPageRequest != null)
            {
                users = await users.NextPageRequest.GetAsync();
                usersList.AddRange(users.CurrentPage);
            }
            return usersList;
        }
Run Code Online (Sandbox Code Playgroud)

检查 Azure Active Directory 用户刀片中的用户并查看其中有多少用户。您还可以通过简单地使用 $top 查询参数扩展代码来测试用户数量是否超过 100 个,该参数为每个请求提供 998 条记录,如下所示。

IGraphServiceUsersCollectionPage users = await graphClient.Users
                    .Request()
                    .Top(998)
                    .GetAsync();
Run Code Online (Sandbox Code Playgroud)

您还可以在Graph Explorer中测试 Graph API 调用。

编辑:

经过长时间的研究,我发现这是 Microsoft Graph Beta SDK 中的一个错误,因为它总是在NextPageRequest. 但有趣的是,它是odata.nextLinkAdditionalData属性中发送的。因此,如果您使用 Graph Beat SDK,请使用以下代码。

public static async Task<List<User>> getUsers()
        {
            List<User> usersList = new List<User>();
            IGraphServiceUsersCollectionPage users = await graphClient.Users
                .Request()
                .GetAsync();

            usersList.AddRange(users.CurrentPage);
            try
            {
                while (users.AdditionalData["@odata.nextLink"].ToString() != null)
                {
                    users.InitializeNextPageRequest(graphClient, users.AdditionalData["@odata.nextLink"].ToString());
                    users = await users.NextPageRequest.GetAsync();
                    usersList.AddRange(users.CurrentPage);
                }
            }
            catch(Exception e)
            {
                
            }
            return usersList;
        }
Run Code Online (Sandbox Code Playgroud)

注意: Microsoft 不建议在生产中使用其Graph Beta 版本,因为它们可能会发生变化。

  • 在 NET 5 平台上使用 C#,使用 Microsoft.Graph.Beta 完美管理,使用第一种方法从 Azure 获取所有用户! (2认同)