图 API 日历视图事件分页

Graph API Calendar view events paging

我是 Graph API 的新手,需要获取已登录用户的日历事件。我已经让这个在这个 article 之后部分工作 但我只看到 10 个事件。

//get calendar events
            var startTime = DateTime.Today.ToString("s");
            var endTime = DateTime.Now.AddDays(7).ToString("s");
            var queryOptions = new List<Microsoft.Graph.QueryOption>()
            {
                new Microsoft.Graph.QueryOption("startDateTime", startTime),
                new Microsoft.Graph.QueryOption("endDateTime", endTime)
            };
            var calendarView = await graphClient.Me.Calendar.CalendarView
            .Request(queryOptions)
            .GetAsync();
            ViewData["Events"] = calendarView;

查看 calenderView 的属性,我可以看到有: {[@odata.nextLink, https://graph.microsoft.com/beta/me/calendar/calendarView?startDateTime=2020-06-12T00%3a00%3a00&endDateTime=2020-06-19T12%3a49%3a37&$skip=10]}

我正在努力了解如何循环浏览页面,以便 return 我可以查看所有事件。

我的应用程序是围绕 ASP Core 3.1 C# 以及 Graph 3.7.0 和 1.20.1

构建的

非常感谢任何帮助。

10 是默认页面大小,您可以通过在 .GetAsync() 之前添加一个 .Top(N) 调用来更改它,其中 N 是最大 1000 的某个数字。不过您可能仍然需要分页,所以你应该做好应对的准备。

使用 Graph .NET SDK 有两种选择。根据您的代码,其中 calendarView 是您最初请求 10 件商品时返回的对象:

自己请求下一页

var nextPage = calendarView.NextPageRequest.GetAsync();

使用 SDK 的页面迭代器class

PageIterator class 会为您浏览每一页,所以所有 你要做的就是给它一个回调来对每个事件做一些事情,然后调用 IterateAsync.

var pageIterator = PageIterator<Event>.CreatePageIterator(
    graphClient, calendarView,
    (e) => {
        // Called for each event so you can process
        // Do something with the event here, add to a list,
        // etc.

        // Return true to keep iterating. You can
        // Return false to stop the iteration before exhausting all
        // pages
        return true;
    }
);
await pageIterator.IterateAsync();