5

我正在尝试使用graph-js-sdk-web.js我相信我完全按照说明将文本文件附加到 Outlook 中的现有事件,但我得到了422响应。我如何让它附加文件?

我很确定我eventID是正确的,因为我可以创建一个事件并通过该 ID 获取它。我很确定我的文件的后加载是正确的,因为我自己附加了文件,然后通过其 id 扩展附件获得了该事件,它是相同的 OData 类型、名称和内容。

到目前为止,我在谷歌上搜索了响应,我所看到的一切要么只适用于人们,要么与该示例相比,他们的代码已关闭。

这是我请求的权限

openid profile User.Read MailboxSettings.Read Calendars.ReadWrite

这与授予注册应用程序的权限相匹配。

这是客户端和文件附件代码:

// Create a Graph client
var client = MicrosoftGraph.Client.init({
    authProvider: (done) => {
        // Just return the token
        done(null, sessionStorage.accessToken);
    }
});

client
    .api('/me/calendar/events/' + eventID + '/attachments')
    .post({
        attachment: {
            "@odata.type": "#microsoft.graph.fileAttachment",
            name: "helloworld.txt",
            contentBytes: "SGVsbG8gd29ybGQh"
        }
    }, (error, response) => {
        if (error)
            console.log(error);
        else {
            console.log(response);
        }
    });

产生了这个请求有效载荷

{
  "attachment":{
    "@odata.type":"#microsoft.graph.fileAttachment",
    "name":"helloworld.txt",
    "contentBytes":"SGVsbG8gd29ybGQh"
  }
}

我得到的回应是

{
  "error": {
    "code": "UnprocessableType",
    "message": "Cannot process input of abstract type 'Microsoft.OutlookServices.Attachment'",
    "innerError": {
      "request-id": "0a81e9f9-ef64-4b5e-b854-65e24fb71cfb",
      "date": "2019-05-14T23:57:29"
    }
  }
}

我没有看到处理附件需要什么。我觉得奇怪的是它的抽象基类,而不是我在该odata.type领域提供的那个,它可能什么都不是。

我打开了图形资源管理器,即使他们没有用于附加到事件的工作示例,我也使用了带有此有效负载和我的 url 的帖子并得到了完全相同的响应 422。这告诉我它不是 js 库,它与graph api 本身,要么设置与他们的文档不同,要么我们缺少一些未记录的设置要求。

4

1 回答 1

1

感谢 jasonjon 的帮助,问题得以解决。在引用的说明中,有效负载示例和 javascript 代码示例不匹配。我使用了 js 示例并在有效负载中添加了父节点附件。原来没有父节点。使用该api的正确方法是

client
    .api('/me/calendar/events/' + eventID + '/attachments')
    .post({
       "@odata.type": "#microsoft.graph.fileAttachment",
       name: "helloworld.txt",
       contentBytes: "SGVsbG8gd29ybGQh"
    }, (error, response) => {
        if (error)
            console.log(error);
        else {
            console.log(response);
        }
    });
于 2019-05-21T03:03:20.440 回答