Как я могу получить количество сообщений в почтовом ящике? - PullRequest
0 голосов
/ 21 октября 2019

У меня проблема с подсчетом сообщений почтового ящика. Я использую c # и Microsoft.Graph 1.18.0

Вот мой код

 public async Task<long> GetItemsCountAsync(string userId)
        {
            var countOption = new QueryOption("$count", "true");

            var request = ServiceClient.Value.Users[userId].Messages.Request();
            request.QueryOptions.Add(countOption);
            var resultMessages = new List<Message>();
            var count = 0L;

            do
            {
                var messagesResult = await request.GetAsync();

                if (messagesResult.AdditionalData != null && messagesResult.AdditionalData.TryGetValue("@odata.count", out var messagesCount))
                {
                    count = (long)messagesCount;
                }

                resultMessages.AddRange(messagesResult);
                request = messagesResult.NextPageRequest;
            }
            while (request != null);

            return count;
        }

И у меня в конце count = 1417 и resultMessages.Count = 760

Я что-то пропустил?

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 27 октября 2019

Все в порядке с приведенным примером. Похоже, $count для List messages конечной точке здесь нельзя доверять, поскольку API не возвращает точный счет для сообщений из указанной папки поиска (см., Например, этот ответ дляболее подробно).

Для получения количества сообщений List mailFolders конечная точка может использоваться вместо:

GET /users/{id | userPrincipalName}/mailFolders?$select=totalItemCount

, где totalItemCount представляет количество элементов в почтовой папке.

C # пример

var folders = await graphClient.Users[userId].MailFolders.Request().Select(f =>f.TotalItemCount).GetAsync();
var totalMessagesCount = folders.Sum(folder => folder.TotalItemCount);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...