How to use OdataNextLink in Microsoft Graph API Beta 5

Viewed 43

I was using the Microsoft Graph API 1.0 but have updated to the Beta in order to use CustomSecurityAttributeValue support. I've managed to port most of the code but I can't see any way to process multiple results pages.

Previously you would just do something like

if (membersPage.NextPageRequest != null)
    membersPage = await membersPage.NextPageRequest.GetAsync();

But NextPageRequest no longer exists, the only available information is OdataNextLink which is a string with no obvious way to request the next page or create a raw request using the url.

Code I have so far:

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)
                        {
                            // How to use membersPage.OdataNextLink???
                        }
                        else
                            break;
                    }   
                }
                catch(Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.WriteLine(ex.StackTrace);
                }
            }

            return users.Values;

        }
0 Answers
Related