如何从 Microsoft Graph 搜索查询返回的 HitID 中获取事件 ID?

How to get an event ID from the HitID returned by a Microsoft Graph search query?

我正在尝试使用 Microsoft Graph API(来自 Node Express 应用程序)修补日历事件。

  1. 我用 client.api('/me/events').post(myEvent) 创建了一个新活动,它工作得很好(我看到它出现在我的日历中)。 return 值的 ID 为:

AAMkADc0Yjg2ODdmLTlkNDQtNGQ0Yi1iNjBmLTE1MDdmYzI4MGJkOABGAAAAAADt0ZJy6xMCRq23C8icFGeqBwAOM3XMH4d2SYMQ5psbvFytAAAAAAENAAAOM3XMH4d2SYMQ5psbvFytAAJ_B-B7AAA=

  1. 然后我使用 client.api('/search/query').post(myQuery) 根据某些条件查找事件,这很好用。我收到一系列点击,只有一个点击(实际上是新创建的事件,查看主题和正文),hitId 等于:

AAMkADc0Yjg2ODdmLTlkNDQtNGQ0Yi1iNjBmLTE1MDdmYzI4MGJkOABGAAAAAADt0ZJy6xMCRq23C8icFGeqBwAOM3XMH4d2SYMQ5psbvFytAAAAAAENAAAOM3XMH4d2SYMQ5psbvFytAAJ+B/B7AAA=

出于某种原因,我不明白为什么这两个 ID 不完全相同:_ 更改为 +- 更改为 /

  1. 我现在想修改活动,尝试用
  2. 更新
let newVal = hits[0].resource // hits is coming from the result returned by the search query
newVal.id = hits[0].hitId // needed because the 'resource' does not contain the id
client.api('/me/events/'+hitId).patch(newVal)

但是我得到一个错误:Resource not found for the segment 'B7AAA='.

能否请您告诉我如何使补丁工作(并解释为什么搜索到的 ID 与创建的 ID 不完全相同)。我已经阅读了文档中的几个示例(例如 https://docs.microsoft.com/en-us/graph/search-concept-events),但我找不到解决方案。

非常感谢!

所以这里发生的事情是,PATCH /me/events/{hitId} 被 Graph API 解析,这样 hitId 中的正斜杠表示路径,而 Graph 最终使用 B7AAA= 作为资源 ID,因此错误 Resource not found for the segment 'B7AAA='.

一个可行的变通方法是将 hitId(s) 中的 / 替换为 %252F。你可以这样做。

client.api(`/me/events/${hitId.replace('/', '%252F')}`).patch(patch)

关于如何使用 /

处理这些 base64 编码资源 ID 的文档,已经有此 Issue on GitHub

至于两个ID不相同,Graph API将接受它们并解析为相同的资源。我不知道为什么它们不同。