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.nextLink在AdditionalData属性中发送的。因此,如果您使用 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 版本,因为它们可能会发生变化。