我正在尝试用Microsoft Graph API(从Node express应用程序)修补日历事件。
- 我用
client.api('/me/events').post(myEvent)
创建了一个新事件,它工作得很好(我看到它出现在我的日历中)。返回值的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不严格像一个创建)。我已经在文档中阅读了几个例子(如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并解析到同一个资源。我不知道为什么他们是不同的。