问题描述
我正在尝试使用 Microsoft Graph API 创建带有扩展数据的日历事件。(实际上,我正在尝试将现有的开放扩展转换为架构扩展,因为我无法过滤开放扩展的非 id 扩展值.)
在我尝试之前,我已经成功创建了 my schema extension 并使用架构扩展创建日历事件响应错误代码“BadRequest”和消息“请求必须只包含扩展更改”。
我尝试按照 doc 执行此操作。
POST https://graph.microsoft.com/v1.0/me/calendars/{calendar-group-id}/events
{
"subject": "schema extension test","body": {
"contentType": "HTML","content": "schema extension test"
},"start": {
"dateTime": "2021-01-22T12:00:00","timeZone": "Eastern Standard Time"
},"end": {
"dateTime": "2021-01-23T14:00:00","attendees": [],"extendedData": {
"courseId": "11","materialId": "22","courseType": "video"
}
}
response:
{
"error": {
"code": "BadRequest","message": "Requests must contain extension changes exclusively.","innerError": {
...
}
}
}
没有extendedData
,创建事件响应成功,创建事件后,如果我patch
只有extendedData
的事件,它响应错误“A type named 'Microsoft.模型无法解析 OutlookServices.OpenTypeExtension'。当模型可用时,每个类型名称都必须解析为有效类型。
PATCH https://graph.microsoft.com/v1.0/me/calendars/{calendar-group-id}/events/{event-id}
{
"extendedData": {
"courseId": "11","courseType": "video"
}
}
response:
{
"error": {
"code": "RequestBodyRead","message": "A type named 'Microsoft.OutlookServices.OpenTypeExtension' Could not be resolved by the model. When a model is available,each type name must resolve to a valid type.","innerError": {
...
}
}
}
当我通过同意 Calendars.Read
许可在登录用户的情况下使用 Graph API Explorer 时,我能够成功。
但是如果我在邮递员那里尝试同样的事情,它就行不通了。
我已经在 Azure 中授予了所有日历权限,包括委派和应用程序权限。
解决方法
这是因为您的架构扩展名不是 extendedData
。
当您使用 POST https://graph.microsoft.com/v1.0/schemaExtensions
为事件类型创建扩展时,真实名称将带有前缀。
像这样:
并基于 Microsoft Graph 的 known issue:
您不能在与操作相同的操作中指定架构扩展 创建联系人、事件、消息或帖子的实例。你必须 首先创建资源实例,然后对其进行 PATCH 添加架构扩展和自定义数据的实例。
所以我们需要先创建事件,然后再更新。
更新事件时,需要指定真实的扩展名: