如何从 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 应用程序)修补日历事件。
- 我用
client.api('/me/events').post(myEvent)
创建了一个新活动,它工作得很好(我看到它出现在我的日历中)。 return 值的 ID 为:
AAMkADc0Yjg2ODdmLTlkNDQtNGQ0Yi1iNjBmLTE1MDdmYzI4MGJkOABGAAAAAADt0ZJy6xMCRq23C8icFGeqBwAOM3XMH4d2SYMQ5psbvFytAAAAAAENAAAOM3XMH4d2SYMQ5psbvFytAAJ_B-B7AAA=
- 然后我使用
client.api('/search/query').post(myQuery)
根据某些条件查找事件,这很好用。我收到一系列点击,只有一个点击(实际上是新创建的事件,查看主题和正文),hitId
等于:
AAMkADc0Yjg2ODdmLTlkNDQtNGQ0Yi1iNjBmLTE1MDdmYzI4MGJkOABGAAAAAADt0ZJy6xMCRq23C8icFGeqBwAOM3XMH4d2SYMQ5psbvFytAAAAAAENAAAOM3XMH4d2SYMQ5psbvFytAAJ+B/B7AAA=
出于某种原因,我不明白为什么这两个 ID 不完全相同:_
更改为 +
,-
更改为 /
。
- 我现在想修改活动,尝试用
更新
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将接受它们并解析为相同的资源。我不知道为什么它们不同。
我正在尝试使用 Microsoft Graph API(来自 Node Express 应用程序)修补日历事件。
- 我用
client.api('/me/events').post(myEvent)
创建了一个新活动,它工作得很好(我看到它出现在我的日历中)。 return 值的 ID 为:
AAMkADc0Yjg2ODdmLTlkNDQtNGQ0Yi1iNjBmLTE1MDdmYzI4MGJkOABGAAAAAADt0ZJy6xMCRq23C8icFGeqBwAOM3XMH4d2SYMQ5psbvFytAAAAAAENAAAOM3XMH4d2SYMQ5psbvFytAAJ_B-B7AAA=
- 然后我使用
client.api('/search/query').post(myQuery)
根据某些条件查找事件,这很好用。我收到一系列点击,只有一个点击(实际上是新创建的事件,查看主题和正文),hitId
等于:
AAMkADc0Yjg2ODdmLTlkNDQtNGQ0Yi1iNjBmLTE1MDdmYzI4MGJkOABGAAAAAADt0ZJy6xMCRq23C8icFGeqBwAOM3XMH4d2SYMQ5psbvFytAAAAAAENAAAOM3XMH4d2SYMQ5psbvFytAAJ+B/B7AAA=
出于某种原因,我不明白为什么这两个 ID 不完全相同:_
更改为 +
,-
更改为 /
。
- 我现在想修改活动,尝试用 更新
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)
关于如何使用 /
至于两个ID不相同,Graph API将接受它们并解析为相同的资源。我不知道为什么它们不同。