0

向 calendarView API 发送第一个请求时,请求不返回或超时。这仅发生在某些请求上,并且似乎仅发生在第一个请求上(可能是因为第一个请求具有更大的响应大小)。

一个示例请求:

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 永远不会被调用。

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

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

知道什么是错的,以及如何解决这个问题?

4

1 回答 1

0

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

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

我在库中找不到根本原因问题,最后只是解析它。我还分析了来自 API 的原始响应,但内容类型标头正确为 application/json,响应状态为 200 OK。

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

const parsedResponse = await rawResponse.json()
于 2019-07-08T19:25:01.373 回答