调用Microsoft Graph API创建日历事件返回406错误该如何解决
问题根因
406 ErrorNotAcceptable 错误本质是请求的Accept请求头和服务端支持的返回MIME类型不匹配,和你修改的Content-Type没有关联:
错误信息明确说明:服务端支持的返回类型均为
application/json相关格式,但你的请求指定的可接受类型仅为text/*,二者无法匹配。
你之前调整Content-Type的操作不解决问题,这个头是声明你发送给服务端的请求体格式,不是声明你能接收的返回格式。
这个问题常见于NetSuite的N/https模块,默认会给未显式声明Accept头的请求加上text/*的默认值。
修复方案
按以下要求调整代码即可:
- 简化
Content-Type取值,直接用application/json即可,无需携带多余的odata参数,Microsoft Graph可正常识别 - 在请求头中显式添加
Accept字段,取值为application/json,覆盖NetSuite的默认值 - 补充请求体中
body字段的contentType声明,避免后续参数校验错误
修复后的完整代码
require(['N/https'], function(https){ function getAuthToken(){ return "<mytokengoeshere>" } function getbody(){ var reqBody = { "subject": "sub test", "body": { "contentType": "Text", // 可根据需要改为HTML "content": "test?" }, "start": { "dateTime": "2021-09-02T12:00:00", "timeZone": "Pacific Standard Time" }, "end": { "dateTime": "2021-09-02T14:00:00", "timeZone": "Pacific Standard Time" }, "attendees": [ { "emailAddress": { "address": "mick@gmail.com", "name": "mick" }, "type": "required" } ] }; return JSON.stringify(reqBody); } function process(){ var headers = {}; headers['Content-Type'] = 'application/json'; // 新增Accept头为核心修复点 headers['Accept'] = 'application/json'; headers['Authorization'] = "Bearer " + getAuthToken(); var responseStr = https.post({ url : 'https://graph.microsoft.com/v1.0/users/<id>/events', body : getbody(), headers : headers }); log.debug('test',JSON.parse(responseStr.body)); var gg=0 } process(); });
内容的提问来源于stack exchange,提问作者Mic S
相关产品推荐
相关产品推荐

