Microsoft graph api Microsoft Graph";信息“;增量请求使用日期筛选器截断过多结果
我想我在delta API上发现了一个日期过滤错误 我在使用Office 365 Graph API处理的一个电子邮件帐户上发现,“邮件”Graph API增量请求返回的项目数与预期时间范围内文件夹中的项目数不同。文件夹中有150000个项目,涵盖10年,但delta只返回过去60天左右的最后5000个ish项目 寻呼工作正常 在查询文件夹“收件箱”的graph API时,它总共有154045个项目和57456个未读项目Microsoft graph api Microsoft Graph";信息“;增量请求使用日期筛选器截断过多结果,microsoft-graph-api,Microsoft Graph Api,我想我在delta API上发现了一个日期过滤错误 我在使用Office 365 Graph API处理的一个电子邮件帐户上发现,“邮件”Graph API增量请求返回的项目数与预期时间范围内文件夹中的项目数不同。文件夹中有150000个项目,涵盖10年,但delta只返回过去60天左右的最后5000个ish项目 寻呼工作正常 在查询文件夹“收件箱”的graph API时,它总共有154045个项目和57456个未读项目 IUserMailFoldersCollectionPage folder
IUserMailFoldersCollectionPage foldersPage =
await client.Users[mailboxid].MailFolders.Request().GetAsync();
我可以使用分页跳过10000、50000或更多消息
model.messages = await client.Users[mailboxid].MailFolders[folderid].Messages.Request().Top(top)
.Skip(skip).GetAsync();
带有日期筛选器的增量不起作用
但是当与nextToken和deltaTokens循环时,deltaToken会出现在大约5000封电子邮件之后。基本上,它似乎只返回过去几个月的结果,尽管过滤器说查找过去20年的邮件
下面是如何生成增量请求的示例。时间在这里是硬编码的,但实际上它是一个变量
var sFilter = $"receivedDateTime ge {DateTimeOffset.UtcNow.AddYears(-20).ToString("yyyy-MM-dd")}";
model.messages = await client.Users[mailboxid].MailFolders[folderid].Messages.Delta().Request()
.Header("Prefer", "odata.maxpagesize=" + maxpagesize)
.Filter(sFilter)
.OrderBy("receivedDateTime desc")
.GetAsync();
然后在每次分页操作中,我都执行以下操作。“nexttoken”是下一个链接或增量链接,具体取决于从第一个请求返回的内容
model.messages = new MessageDeltaCollectionPage();
model.messages.InitializeNextPageRequest(client, nexttoken);
model.messages = await model.messages.NextPageRequest
.Header("Prefer", "odata.maxpagesize=" + maxpagesize)
.GetAsync();
三角洲无滤池工程
如果我对上面的delta执行了完全相同的代码,但在date上删除了“Filter”操作,那么我将获得文件夹中的所有消息
这不是一个很好的解决方案,因为我通常只需要过去一年或两年的消息,如果有15年的消息,那么查询所有内容都是巨大的浪费
更新日期:2019年12月3日
我还是有这个问题。最近,我再次尝试使用Delta,而之前我从服务器上查询所有内容,尽管我可能只需要最后一个月的数据。但那太浪费了
此代码适用于大多数邮箱,但有时我会遇到邮箱出现此问题
我的代码看起来像这样
string sStartingTime = startingTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss") + "Z";
var messageCollectionPage = await client.Users[mailboxsource.GetMailboxIdFromAccountID()].MailFolders[folder.Id].Messages.Delta().Request()
.Filter("receivedDateTime+ge+" + Uri.EscapeDataString(sStartingTime))
.Select(select)
.Header("Prefer", "odata.maxpagesize=" + preferredPageSize)
.OrderBy("receivedDateTime desc")
.GetAsync(cancellationToken);
在大约5000个结果时,即使文件夹中有66K个项目,增量请求也会停止返回结果。Paul,我的同事确认,如果对邮件资源的增量查询应用$filter,确实存在5000个项目的限制。
在第二天内,还将使用此信息更新。感谢您的耐心和支持 嗨,Paul,你能用其他用户邮箱复制这个吗?还是这个特殊的用户?@JeremyThakeMSFT我只在一个邮箱里看到过这个。我有很多其他Office 365帐户没有此问题。最后,我只是查询了所有电子邮件来进行同步。好的,如果这仍然是一个问题,请在这里联系我。@JeremyThakeMSFT我又遇到了这个问题。我能够验证电子邮件是否在他们的收件箱中,我可以使用分页查询它们,但当我使用Delta时,它只返回过去4个月的电子邮件。