用于asp.net的gmail日历分页

用于asp.net的gmail日历分页,asp.net,google-calendar-api,Asp.net,Google Calendar Api,谁能告诉我如何在谷歌日历中实现事件列表的分页, 以下是我到目前为止为获取事件列表所做的工作,,, 在api的早期版本中,我使用了NUmberToRetrieve和StartIndex等过滤器选项,但在这里我没有看到这样的过滤器,我只看到了maxResult和PageToken。我没能弄清楚页面令牌是如何工作的,, 任何帮助我都将不胜感激, 先谢谢你 string serviceAccountEmail = "{someTExt}@developer.gserviceaccount.

谁能告诉我如何在谷歌日历中实现事件列表的分页, 以下是我到目前为止为获取事件列表所做的工作,,, 在api的早期版本中,我使用了NUmberToRetrieve和StartIndex等过滤器选项,但在这里我没有看到这样的过滤器,我只看到了maxResult和PageToken。我没能弄清楚页面令牌是如何工作的,, 任何帮助我都将不胜感激, 先谢谢你

       string serviceAccountEmail = "{someTExt}@developer.gserviceaccount.com";
        string filepath = HttpContext.Current.Server.MapPath("~/App_Data/Key.p12");
        var certificate = new X509Certificate2(filepath, "notasecret",
        X509KeyStorageFlags.Exportable);

        var credential = new ServiceAccountCredential(new
        ServiceAccountCredential.Initializer(serviceAccountEmail)
        {
            Scopes =
                new[] { CalendarService.Scope.Calendar }
        }.FromCertificate
        (certificate));

        BaseClientService.Initializer initializer = new
        BaseClientService.Initializer();
        initializer.HttpClientInitializer = credential;
        initializer.ApplicationName = "Google Calendar Sample";
        //  CalendarService calservice = new CalendarService(initializer);
        CalendarService _calservice;
        string CalendarId = "yourcalenderId";


        _calservice = new CalendarService(initializer);

        var calendarEvents = new List<GenericEvent>();
        try
        {
            EventsResource.ListRequest req = _calservice.Events.List(CalendarId);
            req.TimeMin = new DateTime(2014,12,1); //Convert.ToDateTime(startDate);
            req.TimeMax = new DateTime(2014, 12, 15);
            req.SingleEvents = true;
           // req.MaxResults = numberToRetrive;

            req.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime;


            Events events = req.Execute();

            foreach (Event eventdata in events.Items)
            {

                if (eventdata.Start.DateTime != null)
                {
                    if (eventdata.End.DateTime != null)
                    {
                        var item = new GenericEvent
                        {

                            Title = eventdata.Summary,
                            Contents = eventdata.Description,
                            Location = eventdata.Location,
                            StartTime = eventdata.Start.DateTime.Value,
                            EndTime = eventdata.End.DateTime.Value

                        };

                        calendarEvents.Add(item);
                    }
                }
            }
string serviceAccountEmail=“{someTExt}@developer.gserviceaccount.com”;
字符串filepath=HttpContext.Current.Server.MapPath(“~/App_Data/Key.p12”);
var certificate=new X509Certificate2(文件路径,“notasecret”,
X509keystrageFlags.可出口);
var凭证=新的ServiceAccountCredential(新的
ServiceAccountCredential.初始值设定项(serviceAccountEmail)
{
范围=
新[]{CalendarService.Scope.Calendar}
}.FromCertificate
(证书);
BaseClientService.Initializer初始值设定项=新建
BaseClientService.Initializer();
initializer.HttpClientInitializer=凭证;
initializer.ApplicationName=“谷歌日历样本”;
//CalendarService calservice=新的CalendarService(初始值设定项);
CalendarService\u calservice;
字符串CalendarId=“YourCalendarId”;
_calservice=新日历服务(初始值设定项);
var calendarEvents=新列表();
尝试
{
EventsResource.ListRequest req=\u calservice.Events.List(CalendarId);
req.TimeMin=new DateTime(2014,12,1);//Convert.ToDateTime(startDate);
req.TimeMax=新的日期时间(2014、12、15);
req.SingleEvents=true;
//req.MaxResults=numberToRetrieve;
req.OrderBy=EventsResource.ListRequest.OrderByEnum.StartTime;
Events=req.Execute();
foreach(events.Items中的事件数据)
{
if(eventdata.Start.DateTime!=null)
{
if(eventdata.End.DateTime!=null)
{
var item=新的GenericEvent
{
Title=eventdata.Summary,
Contents=eventdata.Description,
Location=eventdata.Location,
StartTime=eventdata.Start.DateTime.Value,
EndTime=eventdata.End.DateTime.Value
};
calendarEvents.Add(项目);
}
}
}

这有点棘手,基本上你需要设置request.PageToken=result.NextPageToken并再次发送请求

这些是我使用的方法。你可以在底部找到完整类的链接

public static Events list(CalendarService service, string id  ,OptionalValues optionalValues)
        {

            var request = service.Events.List(id);

            if (optionalValues == null)
            {
                request.MaxResults = 100;
            }
            else
            {
                request.MaxResults = optionalValues.MaxResults;
                request.ShowDeleted = optionalValues.ShowDeleted;
            }

            return ProcessResults(request);
        }

 // Just loops though getting all the rows.  
        private static Events ProcessResults(EventsResource.ListRequest request)
        {
            try
            {
                Events result = request.Execute();
                List<Event> allRows = new List<Event>();

                //// Loop through until we arrive at an empty page
                while (result.Items != null)
                {
                    //Add the rows to the final list
                    allRows.AddRange(result.Items);

                    // We will know we are on the last page when the next page token is
                    // null.
                    // If this is the case, break.
                    if (result.NextPageToken == null)
                    {
                        break;
                    }
                    // Prepare the next page of results
                    request.PageToken = result.NextPageToken;

                    // Execute and process the next page request
                    result = request.Execute();

                }
                Events allData = result;
                allData.Items = (List<Event>)allRows;
                return allData;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return null;
            }
        }
公共静态事件列表(CalendarService服务、字符串id、OptionalValues OptionalValues)
{
var请求=service.Events.List(id);
如果(可选值==null)
{
request.MaxResults=100;
}
其他的
{
request.MaxResults=optionalValues.MaxResults;
request.showdeled=optionalValues.showdeled;
}
返回处理结果(请求);
}
//只是循环获取所有行。
私有静态事件ProcessResults(EventsResource.ListRequest请求)
{
尝试
{
事件结果=request.Execute();
List allRows=新列表();
////循环浏览,直到找到一个空白页
while(result.Items!=null)
{
//将行添加到最终列表中
allRows.AddRange(result.Items);
//当下一个页面标记被激活时,我们将知道我们在最后一个页面
//空。
//如果是这样的话,打破僵局。
if(result.NextPageToken==null)
{
打破
}
//准备下一页的结果
request.PageToken=result.NextPageToken;
//执行并处理下一页请求
结果=请求。执行();
}
事件allData=结果;
allData.Items=(列表)所有行;
返回所有数据;
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
返回null;
}
}
代码从