我在MS Graph v5.42.0中使用寻呼来获取消息.在下面的c#示例中,我希望从包含70条消息的邮件文件夹中获取50条消息.正如预期的那样,第一页返回30条消息.对于第二页,我将页面大小更改为20(顶部).但在获取第二个页面时,更改页面大小似乎没有影响,因为会返回30条消息.使用分页时更改页面大小是不可能的吗?
int maxItemSize = 50;
int pageSize = 30;
if (maxItemSize <= pageSize)
pageSize = maxItemSize;
string itemSearchFilter = GetItemFilters(messageClasses, onlyMailsWithAttachments,
ignoredDomains, archiveSize, archiveDate, archiveAge, setFilterIgnoreSignedItems, setFilterNotKdxArchived, setFilterKdxArchived);
string expandValue = string.Format("singleValueExtendedProperties($filter = id eq '{0}' or id eq '{1}' or id eq '{2}' or id eq '{3}' or id eq '{4}')",
MessageClassPropertyID1, DisplayToPropertyID1, DisplayCcPropertyID1, NativeBodyPropertyID, MessageSizePropertyID1);
List<Message> messages = new List<Message>();
var messagesResponse = await GraphServiceClient
.Users[CurrentMailBoxAddress]
.MailFolders[FolderId]
.Messages
.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Top = pageSize;
requestConfiguration.QueryParameters.Expand = new string[] { expandValue };
requestConfiguration.QueryParameters.Filter = itemSearchFilter;
});
while (messagesResponse.Value != null)
{
messages.AddRange(messagesResponse.Value);
if (messages.Count() >= maxItemSize)
break;
else
{
int messagesToBeRetrieved = maxItemSize - messages.Count();
if (messagesToBeRetrieved <= pageSize)
{
// Resets the page size for the last request
pageSize = messagesToBeRetrieved;
}
// If OdataNextLink has a value, there is another page
if (!string.IsNullOrEmpty(messagesResponse.OdataNextLink))
{
messagesResponse = await GraphServiceClient
.Users[CurrentMailBoxAddress]
.MailFolders[FolderId]
.Messages
.WithUrl(messagesResponse.OdataNextLink)
.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Top = pageSize;
requestConfiguration.QueryParameters.Expand = new string[] { expandValue };
requestConfiguration.QueryParameters.Filter = itemSearchFilter;
});
}
else
{
// No more results, exit loop
break;
}
}
}