Office365 Office 365日历API的分页问题

Office365 Office 365日历API的分页问题,office365,outlook-restapi,office365api,Office365,Outlook Restapi,Office365api,我在Office 365 REST API中遇到一些奇怪的分页问题 当然,当使用以下请求批量获取用户的所有事件时,会在每次调用时更新skip参数: https://outlook.office365.com/api/v1.0/users%2Ftest1@eveoh.onmicrosoft.com/Events/?$orderby=Start&$select=ID&$top=50&$skip=100 用户的日历中有1000多个事件,我每次都会收到相同的事件。具有讽刺意味的

我在Office 365 REST API中遇到一些奇怪的分页问题

当然,当使用以下请求批量获取用户的所有事件时,会在每次调用时更新skip参数:

https://outlook.office365.com/api/v1.0/users%2Ftest1@eveoh.onmicrosoft.com/Events/?$orderby=Start&$select=ID&$top=50&$skip=100
用户的日历中有1000多个事件,我每次都会收到相同的事件。具有讽刺意味的是,在666起事件之后。每次都会返回odata.nextLink,并更新skip参数,但返回的事件与上一页相同。该例程最终进入一个无止境的循环,获取同一事件的更多事件

此外,由于某些原因,我有时会收到比要求更大的批次。例如,在下面的请求中,我得到470个事件,而预期为250个

https://outlook.office365.com/api/v1.0/users%2Ftest1@eveoh.onmicrosoft.com/Events/?$orderby=Start&$select=ID&$top=250
有没有人也遇到过这些问题?如果有,你是如何解决问题的


更多的请求/响应跟踪示例说明了该问题。

以下是完整的代码,用于准确返回请求事件的记录数

// The code sample below demonstrates how to get events using the Office 365 unified API (Preview).
$.ajax('https://graph.microsoft.com/beta/me/Events/?$top=1', {
        headers: { 
           Authorization: 'Bearer {token:https://graph.microsoft.com/}',
            Accept: 'application/json;odata.metadata=none',
    }
}).then(function (response) {
        for (var i = 0; i < response.value.length; i++) {
            console.log('Event "' + response.value[i].Subject + '"');
        }
        console.log('\n' + 'Full JSON response:')
        console.log(response);
    }).fail(function (error) {
        console.log(error);
    });
此外,如果您想测试这一点:

1转到下面的url o365沙盒api->代码示例->获取事件->并选择您的语言C或JS:

2使用您的o365凭据登录

3通过为您请求的top记录添加?top=1来更改查询

4您将看到api返回的记录数与请求的记录数完全相同


希望这有帮助。

您是否尝试过提取较小的批次,例如每批次10或20条记录。请检查下面我的答案,了解您遇到的问题。我没有看到此问题。如果$top和$skip参数不被接受,那么服务中的某个地方就有一个bug。如果您可以提供发生这种情况时的响应标头,这将非常有用,如果您可以使用客户机请求id返回客户机请求id标头,则更有用。它已使用标头进行检测。它表明,跳过许多事件的三个请求都会返回相同的事件。在不同的事件中跳过“无”或“不多”结果。感谢提供详细信息。我能够自己复制这个。我会把这件事交给我们的工程师。我面临的问题不仅仅发生在每个用户身上,所以我不认为我提出的请求有什么问题,请参见上文。在某些情况下,它似乎是API中带有skip参数的bug。关于何时发生这种情况的一些解释或解决方法的建议会很好。避免使用$skip,而是使用$filter,每天获取事件,每天的事件应该最少,然后您可以每天提取数据。让我知道这是否适用于您。虽然这可能有效,但这不是很有效,因为我需要每天为每个用户发送一个请求。这将是每个用户一年365次获取日历的呼叫。可扩展性不是很强。即使这样,我也不能保证所有事件都已返回。