Microsoft Graph возвращает только первые 100 пользователей - PullRequest
1 голос
/ 21 июня 2019

У меня есть код ниже, который возвращает всех пользователей на основе фильтра.Проблема в том, что он возвращает только 100 пользователей, но я знаю, что их намного больше.

private List<User> GetUsersFromGraph()
{
    if (_graphAPIConnectionDetails == null) ReadParametersFromXML();
    if (graphServiceClient == null) graphServiceClient = CreateGraphServiceClient();

    var users = graphServiceClient
        .Users
        .Request()
        .Filter(_graphAPIConnectionDetails.UserFilter)
        .Select(_graphAPIConnectionDetails.UserAttributes)
        .GetAsync()
        .Result
        .ToList<User>();

    return users;
}

метод возвращает только 100 пользовательских объектов.Администратор моего портала Azure сообщает, что их должно быть ближе к 60 000.

1 Ответ

1 голос
/ 21 июня 2019

Большинство конечных точек в Microsoft Graph возвращают данные в страницах, включая /users.

Чтобы получить остальные результаты, вам нужно просмотреть страницы:

private async Task<List<User>> GetUsersFromGraph()
{
    if (_graphAPIConnectionDetails == null) ReadParametersFromXML();
    if (graphServiceClient == null) graphServiceClient = CreateGraphServiceClient();

    // Create a bucket to hold the users
    List<User> users = new List<User>();

    // Get the first page
    IGraphServiceUsersCollectionPage usersPage = await graphClient
        .Users
        .Request()
        .Filter("filter string")
        .Select("property string")
        .GetAsync();

    // Add the first page of results to the user list
    users.AddRange(usersPage.CurrentPage);

    // Fetch each page and add those results to the list
    while (usersPage.NextPageRequest != null)
    {
        usersPage = await usersPage.NextPageRequest.GetAsync();
        users.AddRange(usersPage.CurrentPage);
    }

    return users;
}

Одно очень важное замечание: этот метод является наиболее эффективным способом извлечения данных из Graph.(или любой REST API на самом деле).Ваше приложение будет долго там сидеть, пока оно загружает все эти данные.Правильная методология здесь - выборка каждой страницы и обработка только этой страницы перед извлечением дополнительных данных.

...