Outlook rest api "synchronize messages" 在后续调用中忽略 $expand

Outlook rest api "synchronize messages" ignores $expand in subsequent calls

我正在尝试使用 Outlook Rest 的测试版同步 Outlook 文件夹(比如收件箱)Api see doc here

我只需要检索 属性 IsReadPR_INTERNET_MESSAGE_ID

所以按照文档,对于第一次同步,我的请求如下所示:

始终添加以下 Http header:

  request.Headers.Add("Prefer", "odata.track-changes");
  request.Headers.Add("Prefer", "odata.maxpagesize=5"); //Use a small page size easier for debugging
  1. 第一个初始完全同步请求

    https://outlook.office365.com/api/beta/Me/MailFolders('inbox')/messages?$select=IsRead&$expand=SingleValueExtendedProperties($filter=(PropertyId eq 'String 0x1035'))

    好结果 value 数组包含我需要的内容。

  2. 第一个请求后的第二个请求使用deltatoken

    https://outlook.office365.com/api/beta/Me/MailFolders('inbox')/messages?$select=IsRead,Subject&$expand=SingleValueExtendedProperties($filter=(PropertyId eq 'String 0x1035'))&$deltatoken=a758b90491954a61ad463ef3a0e690a2

    结果不佳,没有 SingleValueExtendedProperties 条目

  3. 下一个使用 skiptoken...

    的分页请求

    https://outlook.office365.com/api/beta/Me/MailFolders('inbox')/messages?$select=IsRead,Subject&$expand=SingleValueExtendedProperties($filter=(PropertyId eq 'String 0x1035'))&$skiptoken=e99ad10324464488b6b219ca5ed6be1c

    再次出现不良结果,与 2.

  4. 相同

我觉得这像是一个错误。你能提供解决方法吗?从 ItemId 的列表中可以轻松有效地检索相应的 PR_InternetMessage_Id 的列表(不是每个项目的项目)?

另请注意,在文档中写道:

The response will include a Preference-Applied: odata.track-changes header. If you attempt to sync a resource that is not supported, this header will not be returned in the response. Check for this header before processing the response to avoid errors.

似乎对于 2. 和 3. 调用此响应 header "Preference-Applied" 未设置。

今天的同步功能不支持扩展属性。但是,我们正在努力实现这一点,它应该会在几周内开始工作。

编辑: 有关 PR_INTERNETMESSAGE_ID 非常特殊情况的解决方法,请查看下面的评论。