Azure AD Graph API仅返回100个用户,Asp.Net Core API需获取全部用户
解决Asp.Net Core API调用Microsoft Graph API仅获取100个用户的问题
Microsoft Graph API默认采用分页机制返回数据,单次请求最多返回100条用户记录。要获取Azure AD中的全部用户,需要遍历所有分页结果。下面是两种可行的实现方案:
方案1:使用Graph SDK内置的PageIterator(推荐)
利用Graph SDK提供的PageIterator可以自动处理分页逻辑,简化代码:
var token = await _tokenAcquisition.GetAccessTokenForUserAsync("User.Read.All"); var client = _clientFactory.CreateClient(); client.BaseAddress = new Uri("https://graph.microsoft.com/v1.0"); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var graphClient = new GraphServiceClient(client) { AuthenticationProvider = new DelegateAuthenticationProvider((requestMessage) => { requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token); return Task.CompletedTask; }), BaseUrl = "https://graph.microsoft.com/v1.0" }; // 初始化用户列表 var allUsers = new List<User>(); // 创建查询请求 var usersRequest = graphClient.Users.Request(); // 使用PageIterator遍历所有分页 var pageIterator = PageIterator<User>.CreatePageIterator( graphClient, await usersRequest.GetAsync(), (user) => { allUsers.Add(user); return true; // 继续迭代 }); await pageIterator.IterateAsync(); return allUsers;
方案2:手动处理分页请求
如果需要更灵活的控制,可以手动检查并请求下一页数据:
var token = await _tokenAcquisition.GetAccessTokenForUserAsync("User.Read.All"); var client = _clientFactory.CreateClient(); client.BaseAddress = new Uri("https://graph.microsoft.com/v1.0"); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var graphClient = new GraphServiceClient(client) { AuthenticationProvider = new DelegateAuthenticationProvider((requestMessage) => { requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token); return Task.CompletedTask; }), BaseUrl = "https://graph.microsoft.com/v1.0" }; var allUsers = new List<User>(); var currentPage = await graphClient.Users.Request().GetAsync(); // 循环获取所有分页 while (currentPage != null) { allUsers.AddRange(currentPage); // 检查是否有下一页 if (currentPage.NextPageRequest != null) { currentPage = await currentPage.NextPageRequest.GetAsync(); } else { break; } } return allUsers;
补充说明
- 若需要提升单页返回数量,可以在请求中添加
Top()方法调整上限(最大支持999条),例如:graphClient.Users.Request().Top(999).GetAsync(),减少分页次数。 - 确保应用已正确配置
User.Read.All权限(需管理员同意),避免因权限不足导致无法获取全部用户。
内容的提问来源于stack exchange,提问作者Soubhik-INT
相关产品推荐
相关产品推荐

