Microsoft Graph API calendarView delta 终结点未响应初始请求

Microsoft Graph API calendarView delta endpoint does not respond on initial request

向日历视图发送第一个请求时API,请求没有return或超时。这只发生在一些请求上,而且似乎只发生在第一个请求上(可能是因为第一个请求有更大的响应大小)。

请求示例:

GET /me/calendarView/delta?startDateTime=2019-06-27T22:00:00.000Z&endDateTime=2019-09-08T13:17:30.659Z

我找到的当前解决方案是将 odata.maxpagesize 减少到一个非常小的数字(目前 2 是适用于我测试过的所有日历的最高数字)。

使用nodejs客户端发送请求 "@microsoft/microsoft-graph-client": "1.7.0".

// Initialize client with credentials
const client = graph.Client.init({
            authProvider: done => {
                done(null, credentials.access_token);
            }
        });

const url = "/me/calendarView/delta?startDateTime=2019-06-27T22:00:00.000Z&endDateTime=2019-09-08T13:17:30.659Z

console.log("Request start")
const result = await oAuth2Client
                .api(url)
                .header("prefer", "odata.maxpagesize=10")
                .get();
console.log("Got result", result);

这里最后一个 console.log 永远不会被调用。

预期的结果是请求 returns,至少有一个错误代码。我还希望 API 能够处理比每页 2 个更多的项目。

设置较小的 maxpagesize 的当前解决方案暂时有效,但是,我预计还有另一个根本原因问题。

知道哪里出了问题,如何解决?

经过大量调试后,我将问题追溯到节点库。当要求 API 的原始响应时,无论页面大小如何,我都得到了结果。

解决方案是在从图书馆请求原始响应后,自己手动解析响应。这是基于 https://github.com/microsoftgraph/msgraph-sdk-javascript/blob/dev/src/GraphResponseHandler.ts#L98

库中的实现

我在库中找不到根本原因问题,最后只是在我这边解析它。我还分析了来自 API 的原始响应,但是 content-type header 是正确的 application/json,并且响应状态为 200 OK。

const rawResponse = client.api(url).response(ResponseType.RAW).get()

const parsedResponse = await rawResponse.json()