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

如何在Microsoft Graph API Beta中使用OdataNextLink实现分页

Graph API Beta版分页替代方案(原NextPageRequest失效)

从Microsoft Graph API v1.0升级到Beta版以支持CustomSecurityAttributeValue后,原分页逻辑依赖的NextPageRequest属性已被移除,仅能获取字符串类型的OdataNextLink,需要通过该链接手动发起下一页请求。

以下是修改后的完整代码,实现基于OdataNextLink的分页处理:

public async Task<IEnumerable<Microsoft.Graph.Beta.Models.User>> GetGraphUsersInGroups(IEnumerable<string> groupIds, string? searchText = null)
{
    Dictionary<String, Microsoft.Graph.Beta.Models.User> users = new Dictionary<String, Microsoft.Graph.Beta.Models.User>();

    foreach (var groupId in groupIds)
    {
        try
        {
            var membersPage = await GraphClient.Groups[groupId].Members
                .GetAsync((memberRequest) => {
                    memberRequest.Headers.Add(new KeyValuePair<string, string>("$count", "true"));
                    memberRequest.Headers.Add(new KeyValuePair<string, string>("ConsistencyLevel", "eventual"));
                    memberRequest.QueryParameters.Count = true;
                    memberRequest.QueryParameters.Orderby = new[] { "displayName" };
                    if (searchText != null)
                        memberRequest.QueryParameters.Search = $"\"displayName:{searchText}\"";
                });

            while (membersPage != null)
            {
                foreach (var member in membersPage.Value.OfType<Microsoft.Graph.Beta.Models.User>())
                {
                    users[member.Id] = member;
                }
                if (membersPage.OdataNextLink != null)
                {
                    // 基于OdataNextLink创建下一页请求,保留必要请求头
                    var nextPageRequest = GraphClient.Request()
                        .WithUrl(membersPage.OdataNextLink)
                        .Header("ConsistencyLevel", "eventual")
                        .Header("$count", "true");

                    membersPage = await nextPageRequest.GetAsync<Microsoft.Graph.Beta.Models.UserCollectionResponse>();
                }
                else
                    break;
            }
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.Message);
            Console.WriteLine(ex.StackTrace);
        }
    }

    return users.Values;
}

关键说明

  • 通过GraphClient.Request().WithUrl(membersPage.OdataNextLink)直接基于分页链接构建请求
  • 手动添加原请求中的ConsistencyLevel和$count请求头,确保搜索、计数等功能的一致性
  • 使用GetAsync<UserCollectionResponse>解析下一页结果,替换原集合对象继续循环分页

内容的提问来源于stack exchange,提问作者Twisted89

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:20:27