public async Task <List <Event> > GetEventsBetweenDatesAsync( string calendarName, DateTimeZone start, DateTimeZone end, CancellationToken cancellationToken = default) { try { var calendarId = await GetCalendarIdAsync(calendarName, cancellationToken); var startDate = start.UniversalTime.Date.ToString("o"); var endDate = end.UniversalTime.Date.ToString("o"); var queryOptions = new List <QueryOption>() { new QueryOption("startDateTime", startDate), new QueryOption("endDateTime", endDate) }; ICalendarCalendarViewCollectionPage page = await _graphServiceClient.Me.Calendars[calendarId].CalendarView .Request(queryOptions) .GetAsync(cancellationToken); List <Event> events = page.ToList(); // Query the rest of the pages while (page.NextPageRequest is not null) { page = await page.NextPageRequest.GetAsync(cancellationToken); events.AddRange(page.ToList()); } _logger.LogInformation("{this} success, {eventCount} events found.", nameof(GetEventsBetweenDatesAsync), events.Count); return(events); } catch (Exception ex) { _logger.LogCritical(ex, "{this} failed.", nameof(GetEventsBetweenDatesAsync)); return(new()); } }