Microsoft Graph возвращает только первых 100 пользователей

У меня есть приведенный ниже код, который возвращает всех пользователей на основе фильтра. Проблема в том, что он возвращает только 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.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
4 409
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Большинство конечных точек в 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). Ваше приложение будет сидеть там долгое время, пока загружает все эти данные. Правильная методология здесь — извлекать каждую страницу и обрабатывать только эта страница перед извлечением дополнительных данных.

Я согласен. Это часть пакетной работы один раз в день, поэтому я думаю, что со мной все будет в порядке. Но я принимаю вашу точку зрения, если хочу использовать этот код в пользовательском приложении. Тогда это будет проблемой.

gtrivedi 24.06.2019 15:52

@Marc LaFleur, я использую этот подход, но, как вы сказали, это занимает огромное количество времени ... но мне нужно каким-то образом иметь пользователей в списке, потому что, когда я иду, чтобы создать соавтора, у меня есть это раскрывающееся меню с azure AD пользователи, я выбираю их, чтобы создать пользователя с этой информацией... Как я могу добиться этого с максимальной производительностью?

Ricardo Figueiredo 13.10.2020 13:05

Если у вас достаточно пользователей, и это занимает много времени, они, вероятно, не должны быть в раскрывающемся списке. Вам лучше использовать поле поиска, которое фильтрует список пользователей.

Marc LaFleur 21.10.2020 23:16

Другие вопросы по теме