如何用C#通过Graph API获取Azure目录所有用户?当前仅返回100个
解决Graph API获取全部Azure用户的问题
Microsoft Graph API默认采用分页机制,单次请求最多返回100条用户数据,因此需要处理分页逻辑才能获取所有用户。以下是两种实现方式:
方式一:使用PageIterator(推荐)
PageIterator是Graph SDK提供的工具类,能自动处理分页逻辑,代码更简洁:
public async Task GetAllUsers() { // 初始化请求,获取第一页数据 var userPage = await GraphClient.Users.GetAsync(); // 创建PageIterator,指定遍历回调 var pageIterator = PageIterator<User, UserCollectionResponse>.CreatePageIterator( GraphClient, userPage, // 处理每个用户的逻辑 (user) => { Console.WriteLine(user.UserPrincipalName); // 注意:原代码此处是固定字符串,需改为实际属性调用 return true; // 返回true继续遍历后续用户 }, // 配置下一页请求 (request) => request ); // 执行迭代器,遍历所有分页的用户数据 await pageIterator.IterateAsync(); }
方式二:手动处理分页(检查OdataNextLink)
如果需要更精细控制分页过程,可以手动检查OdataNextLink并循环请求:
public async Task GetAllUsers() { List<User> allUsers = new List<User>(); var currentPage = await GraphClient.Users.GetAsync(); // 添加第一页用户数据 allUsers.AddRange(currentPage.Value); // 循环获取下一页,直到没有更多数据 while (!string.IsNullOrEmpty(currentPage.OdataNextLink)) { currentPage = await GraphClient.Users.WithUrl(currentPage.OdataNextLink).GetAsync(); allUsers.AddRange(currentPage.Value); } // 遍历并打印所有用户 foreach (var user in allUsers) { Console.WriteLine(user.UserPrincipalName); } Console.WriteLine($"总用户数:{allUsers.Count}"); }
重要提示
- 原代码中
Console.WriteLine("item.UserPrincipalName");是输出固定字符串,需改为Console.WriteLine(item.UserPrincipalName);才能打印实际的用户主体名称。 - 确保你的应用已获得足够的Graph API权限(至少需要
User.Read.All权限),否则可能无法获取全部用户数据。
内容的提问来源于stack exchange,提问作者Ashish Prajapati
相关产品推荐
相关产品推荐

