Пример подкачки графиков - PullRequest
0 голосов
/ 03 мая 2020

На основании ссылки do c, кто-нибудь может привести краткий пример того, как на самом деле реализовать метод GetAllUsers на стороне клиента с использованием нумерации страниц?

1 Ответ

0 голосов
/ 03 мая 2020

Хорошо, пока я реализовал это рекурсивным способом, похоже, работает. Возможно, может быть упрощено, и лучшая обработка ошибок и т. Д. c. Но обратная связь приветствуется! :)

 public async Task<IEnumerable<User>> ListAdGroupMembersAsync(string groupObjectId, ICollection<User> currentPage = null, string nextLink = null, bool start = true )
        {
            var token = await GetToken();
            _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Value);

            // Starting
            string endpoint;
            if (nextLink == null && start)
            {
                currentPage = new Collection<User>();
                endpoint = $"https://graph.microsoft.com/v1.0/groups/{groupObjectId}/members?$top=200&$select=displayName,userPrincipalName,id";
            }
            // Next page
            else if (nextLink != null)
            {
                endpoint = nextLink;
            }
            // ending
            else
            {
                return currentPage;
            }
            try
            {
                var users = await _httpClient.GetFromJsonAsync<Users>(endpoint).ConfigureAwait(false);
                currentPage.AddRange(users.value);
                return await ListAdGroupMembersAsync(groupObjectId, currentPage, users.NextLink, false).ConfigureAwait(false);
            }
            catch (HttpRequestException ex)
            {
                Console.Error.WriteLine("ListAdGroupMembersAsync failed. Users could not be retrieved. Error: " + ex.Message);
            }
            return null;
        }

Модель:

using Json = System.Text.Json.Serialization.JsonPropertyNameAttribute;
public class User
    {
        public string Id { get; set; }
        public string DisplayName { get; set; }
        public string UserPrincipalName { get; set; }
    }

    public class Users
    {
        public ICollection<User> value { get; set; }

        [Json("@odata.nextlink")]
        public string NextLink { get; set; }
    }
...