我在计算邮箱消息方面有问题。 我使用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
我错过了什么吗?
谢谢您的帮助!
答案 0 :(得分:0)
使用所提供的示例,一切都很好。似乎List messages
endpoint的$count
在这里不可信任,因为API不会为来自指定搜索文件夹的邮件返回准确的计数(例如,请参考this answer以获得更多详细信息)。
要获取邮件计数,可以使用List mailFolders
endpoint:
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);