Graph API 日历查看事件分页

Jon*_*ono 3 c# microsoft-graph-calendar microsoft-graph-api

我是 Graph API 的新手,需要获取登录用户的日历事件。在这篇文章之后我已经部分地工作了 ,但我只看到了 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;
Run Code Online (Sandbox Code Playgroud)

查看 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]}

我正在努力理解如何循环浏览页面,以便我可以将所有事件返回到我的视图中。

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

非常感谢任何帮助。

Jas*_*ton 9

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

使用 Graph .NET SDK,您有两种选择来执行此操作。根据您的代码,calendarView您最初请求 10 个项目返回的对象在哪里:

自己请求下一页

var nextPage = calendarView.NextPageRequest.GetAsync();
Run Code Online (Sandbox Code Playgroud)

使用SDK的页面迭代器类

该类PageIterator将为您浏览每个页面,因此您所要做的就是给它一个回调以对每个事件执行某些操作,然后调用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();
Run Code Online (Sandbox Code Playgroud)