您好,
我目前正在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)
为什么我不在日历中看到它们?
答案 0 :(得分:0)
我发现了错误。
问题实际上并不是我的代码。
首先,如果您使用" primary"作为日历ID,它不知道我的帐户的日历ID。您可以从中获取活动,但它不会显示在您的日历中。一位同事建议它是一种沙盒日历(或一个bug)。
我从帐户输入日历ID后(您的主要电子邮件地址或您在日历设置中找到的地址),我收到错误403.
这是因为没有与服务帐户地址共享日历(在创建服务帐户时由Google创建的andress,通常是XXXXX@xxxxx.iam.gserviceaccount.com)
因此,如果您想通过Google日历创建活动:
使用服务帐户的电子邮件地址分享您的日历。
使用上面的代码(或使用client_secrets.json的代码)
注意:它并不总是您的代码,但缺少一些管理工作。
代码在这里:
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();
}