谷歌日历Api v3 asp.net代码200,但没有插入任何事件

时间:2017-07-25 20:59:34

标签: c# asp.net-core .net-core google-calendar-api

您好,

我目前正在asp.net核心构建一个预约查找程序。我在访问日历时设法获得了代码200.

但是,Google日历并未保存我要发送的活动。控制台仪表板显示已收到。帐户中只有一个日历。

到目前为止我的代码:

 public void InsertIntoCalendar()
    {
        var Cal = new CalendarEvents();
        var newEvent = Cal.CreateEvent("TestEvent", "RandomLocation", "Description", "2017-07-28");
        var service = CreateService();

        service.Events.Insert(newEvent, serviceAccountEmail).Execute();

            String calendarId = "primary";
            EventsResource.InsertRequest request = service.Events.Insert(newEvent, calendarId);
            Event createdEvent = request.Execute();
    }

CalendarEvents是一个通过多种方法创建Event的类。 我尝试使用Event类本身,但结果是一样的。

服务创建如下:

        private CalendarService CreateService()
    {
        string keyFilePath = "random.p12;

        var certificate = new X509Certificate2(keyFilePath, "notasecret", X509KeyStorageFlags.Exportable);

        ServiceAccountCredential credential = new ServiceAccountCredential(
            new ServiceAccountCredential.Initializer(serviceAccountEmail)
            {
                Scopes = Scopes
            }.FromCertificate(certificate));

        // Create the service.
        CalendarService service = new CalendarService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            //ApplicationName = "ShowCase",
        });

        return service;
    }

在cshtml页面上,我用razor执行此操作:

            CalendarConnection TestConnection = new CalendarConnection();
            TestConnection.InsertIntoCalendar();     

我正在获取代码200,但事件没有插入日历中。我阅读了关于此的perl文章,但我不能做任何事情。

我做错了什么?

提前谢谢。

编辑: 当我从控制台应用程序调用events.list时,我可以看到事件:

TEST(26.07.2017 20:58:08)

TEST(26.07.2017 20:58:57)

TEST(26.07.2017 21:03:38)

TEST(26.07.2017 21:05:27)

为什么我不在日历中看到它们?

1 个答案:

答案 0 :(得分:0)

我发现了错误。

问题实际上并不是我的代码。

首先,如果您使用" primary"作为日历ID,它不知道我的帐户的日历ID。您可以从中获取活动,但它不会显示在您的日历中。一位同事建议它是一种沙盒日历(或一个bug)。

我从帐户输入日历ID后(您的主要电子邮件地址或您在日历设置中找到的地址),我收到错误403.

这是因为没有与服务帐户地址共享日历(在创建服务帐户时由Google创建的andress,通常是XXXXX@xxxxx.iam.gserviceaccount.com)

因此,如果您想通过Google日历创建活动:

  1. https://console.developers.google.com

  2. 创建服务帐户
  3. 使用服务帐户的电子邮件地址分享您的日历。

  4. 使用上面的代码(或使用client_secrets.json的代码)

  5. 注意:它并不总是您的代码,但缺少一些管理工作。

    代码在这里:

     public void InsertIntoCalendar()
    {
        var Cal = new CalendarEvents();
        var newEvent = Cal.CreateEvent("TestEvent", "RandomLocation", "Description", "2017-07-28");
        var service = CreateService();
    
        service.Events.Insert(newEvent, serviceAccountEmail).Execute();
    
            String calendarId = "XXXXXX@group.calendar.google.com"; // or the e-mail address of the Google account if you want to use the primary calendar
            EventsResource.InsertRequest request = service.Events.Insert(newEvent, calendarId);
            Event createdEvent = request.Execute();
    }