我有一个与Office365集成的应用程序,我正在尝试使用Microsoft Graph API在Outlook日历上创建日历事件。以下是我到目前为止的情况:
request.post({
url:'https://graph.microsoft.com/v1.0/me/events',
form: {
"Id": null,
"Subject": "Discuss the Calendar REST API",
"Body": {
"ContentType": "Text",
"Content": "This is some content."
},
"Start": {
"DateTime": "2016-01-24T18:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2016-01-25T19:00:00",
"TimeZone": "Pacific Standard Time"
},
"ShowAs": "Free",
"IsReminderOn":false
},
headers: {
"Authorization": "Bearer " + access_token,
"Content-Type": "application/json"
}
}, function(err, httpResponse, body) {
if (err) {
console.log('addMicrosoftAccessToken() ERROR = ' + err);
callback(err, false);
} else {
console.log('httpResponse = ' + JSON.stringify(httpResponse));
callback(null, true);
}
})
问题是该事件未保存在用户Outlook日历上。另外,我没有在日志中收到错误。我怀疑我没有在请求中发送正确的表单数据。有什么想法吗?
更新:以下是httpResponse
我在日志中的信息:
{
"statusCode": 500,
"body": "{\r\n \"error\": {\r\n \"code\": \"UnknownError\",\r\n \"message\": \"\",\r\n \"innerError\": {\r\n \"request-id\": \"8ebe2efc-649c-4d8d-bee1-be2457cc3a45\",\r\n \"date\": \"2016-01-25T19:05:27\"\r\n }\r\n }\r\n}",
"headers": {
"cache-control": "private",
"transfer-encoding": "chunked",
"content-type": "application/json",
"server": "Microsoft-IIS/8.5",
"request-id": "8ebe2efc-649c-4d8d-bee1-be2457cc3a45",
"client-request-id": "8ebe2efc-649c-4d8d-bee1-be2457cc3a45",
"x-ms-ags-diagnostic": "{\"ServerInfo\":{\"DataCenter\":\"East US\",\"Slice\":\"SliceB\",\"ScaleUnit\":\"000\",\"Host\":\"AGSFE_IN_4\",\"ADSiteName\":\"EST\"}}",
"outboundduration": "707.5019",
"duration": "713.2419",
"x-powered-by": "ASP.NET",
"date": "Mon, 25 Jan 2016 19:05:27 GMT",
"connection": "close"
},
"request": {
"uri": {
"protocol": "https:",
"slashes": true,
"auth": null,
"host": "graph.microsoft.com",
"port": 443,
"hostname": "graph.microsoft.com",
"hash": null,
"search": null,
"query": null,
"pathname": "/v1.0/me/events",
"path": "/v1.0/me/events",
"href": "https://graph.microsoft.com/v1.0/me/events"
},
"method": "POST",
"headers": {
"Authorization": "Bearer blah blah",
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/json",
"content-length": 643
}
}
}
更新2: 此链接标题为"创建事件",并且似乎在请求和响应部分中列出了响应,使其特别令人困惑: http://graph.microsoft.io/docs/api-reference/v1.0/api/event_post_instances 此外,在上面列出的链接
POST https://graph.microsoft.com/v1.0/me/events/<id>/instances
什么是<id>
?它没有告诉我应该是什么ID?
更新3:此链接也标题为&#34;创建活动&#34;,但它有一个不同的POST网址:
http://graph.microsoft.io/docs/api-reference/v1.0/api/user_post_events
非常混乱。
答案 0 :(得分:1)
您的me / events请求失败的原因是您使用Azure Active Directory(AAD)授权流程来访问您的个人Microsoft帐户(Live Id)日历。 AAD允许创建映射到Microsoft帐户的用户,以便在请求AAD令牌时使用您的Microsoft帐户凭据登录。这样,您的凭据可用于访问业务(工作或学校)和消费者(个人)服务。共享凭据时,有2个不同的用户帐户。访问OneDrive for Business或SharePoint等业务服务时,您需要在工作或学校组织的上下文中使用AAD用户帐户登录。访问Hotmail或OneDrive等消费者服务时,您需要使用Microsoft帐户(Live Id)。您请求尝试访问组织上下文中的Outlook帐户,但由于您的电子邮件地址已由与Microsoft帐户关联的个人Outlook帐户提供,因此该帐户不存在。请使用融合授权流程(http://graph.microsoft.io/en-us/docs/authorization/converged_auth)使用您的个人Microsoft帐户登录,并且您将能够访问您的个人电子邮件和日历。或者,您可以继续使用AAD授权流程来访问未映射到Microsoft帐户的AAD用户的工作日历或学校日历。