将第一个请求发送到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设置为较小的当前解决方案暂时可行,但是,我认为还有另一个根本原因。
有什么想法,怎么解决?
答案 0 :(得分:0)
经过大量调试,我将问题追溯到节点库。当从API请求原始响应时,无论页面大小如何,我都会获取结果。
解决方案是在要求库提供原始响应后,自己亲自解析响应。这基于https://github.com/microsoftgraph/msgraph-sdk-javascript/blob/dev/src/GraphResponseHandler.ts#L98
库中的实现我在库中找不到根本原因,最终只对它进行了解析。我还分析了来自API的原始响应,但content-type标头正确为application / json,响应状态为200 OK。
const rawResponse = client.api(url).response(ResponseType.RAW).get()
const parsedResponse = await rawResponse.json()