将 Office365 REST 日历 ID 映射到 EWS CalendarItem ID

Mapping Office365 REST Calendar IDs to EWS CalendarItem IDs

使用 Exchange push notifications I've been creating a service that syncs over calendar data from Office365 users. I've been using a combination of the Office365 Calendar REST API(获取和管理日历)和 EWS API(订阅日历更改)。

我注意到最近 MS 为其订阅端点引入了预览 API。不过,这个API还处于预览模式,我想暂时避免使用它。

设置完所有内容后,问题是我无法在推送通知返回的 calendar event resource (REST) and the EWS CalendarItem resource 之间建立关联。 CalendarItem 的 ItemId 和 REST 事件的 Id 不同。

当尝试更新我从 REST 保存的事件时 API 这被证明是有问题的,因为我找不到将两者关联起来的好方法。

非常感谢任何帮助!

编辑 经过进一步挖掘,我实际上发现从 REST API (GET /calendars) 返回的日历似乎是 EWS 层次结构中的 Message 项。因此,此端点不会返回实际的文件夹 ID,而是 returns 属于某个名为 "Common Views".

的文件夹中的项目 ID

我不确定为什么要这样设计,但 base64 编码 ID 的差异似乎非常小。我只是仍然想不出将两者联系起来的好方法。

所以我的 ID 不匹配是因为通过 Exchange2007 版本订阅了 EWS 推送通知。 Exchange2007_SP1 及更高版本具有相互兼容的 EwsId,因此这包括 Office365。

- 个字符替换为 / 并将 _ 个字符替换为 + 允许我正确调用 Office365 API 资源。

最后,当调用 get calendars 时,API 实际上返回了位于 Common Views 文件夹下的 Message 项目类型。因此,当尝试使用这些 ID 进行订阅时,EWS API 会抱怨我发送给它的是 ItemID 而不是文件夹 ID。

谢天谢地 我发现通过 GET /calendars/ews_folder_id 向 REST API 发出请求实际上是有效的,一旦你正确地将 ID 转换为 URI 安全类型(见上面的转换)。