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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:50:29