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 构建的
非常感谢任何帮助。
10 是默认页面大小,您可以通过.Top(N)在 之前添加调用来更改它.GetAsync(),其中 N 是最大 1000 的数字。不过您可能仍然需要分页,因此您应该准备好处理这个问题。
使用 Graph .NET SDK,您有两种选择来执行此操作。根据您的代码,calendarView您最初请求 10 个项目返回的对象在哪里:
var nextPage = calendarView.NextPageRequest.GetAsync();
Run Code Online (Sandbox Code Playgroud)
该类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)