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



我正在尝试用Microsoft Graph API(从Node express应用程序)修补日历事件。

  1. 我用client.api('/me/events').post(myEvent)创建了一个新事件,它工作得很好(我看到它出现在我的日历中)。返回值的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不严格像一个创建)。我已经在文档中阅读了几个例子(如https://learn.microsoft.com/en-us/graph/search-concept-events),但我找不到解决方案。

多谢!

所以这里发生的是,PATCH /me/events/{hitId}正在通过图形API解决,这样hitId中的正斜杠表示路径,图形最终使用B7AAA=作为资源id,因此错误Resource not found for the segment 'B7AAA='.

一个可能工作的工作是将hitId(s)中的/替换为%252F。你可以这样做。

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

关于如何使用/处理这些base64编码的资源id的文档,GitHub上已经有了这个问题

对于两个id不相同的情况,Graph API将同时接受两个id并解析到同一个资源。我不知道为什么他们是不同的。

相关内容

  • 没有找到相关文章

最新更新