You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:52:45