2014-11-18 1 views
0

Я пытаюсь вставить событие календаря Google через учетную запись службы Google, созданную для приложения в моей консоли разработчика, но я постоянно получаю беспомощную 404 ответ на метод Execute. В обзоре консоли dev я вижу, что приложение получает запросы, потому что есть примеры ошибок в методе calendar.events.insert. Нет информации о том, что не удается. Мне нужен этот процесс для использования процесса учетной записи службы вместо OAuth2, чтобы не требовать аутентификации каждый раз, когда нужно создать событие календаря.Google API Calender v3 Событие Вставка через служебную учетную запись с использованием Asp.Net MVC

Я установил учетную запись службы, учитывая, что приложение имеет имя, имеет файл p12, указанный в проекте. Я также зашел в личный календарь и поделился с адресом электронной почты учетной записи службы. Кроме того, за пределами этого билета я создал дополнительное приложение через учетную запись администратора и предоставил доменный доступ к учетной записи службы только для получения той же беспомощной ошибки 404, что и сейчас.

Error Message: Google.Apis.Requests.RequestError 
Not Found [404] 
Errors [Message[Not Found] Location[ - ] Reason[notFound] Domain[global] 

Любая помощь в определении разъединения или ошибки будет принята с благодарностью.

var URL = @"https://www.googleapis.com/calendar/v3/calendars/testcalendarID.com/events"; 
    string serviceAccountEmail = "[email protected]"; 
    var path = Path.Combine(HttpRuntime.AppDomainAppPath, "Files/myFile.p12"); 
    var certificate = new X509Certificate2(path, "notasecret", 
    X509KeyStorageFlags.Exportable); 

    ServiceAccountCredential credential = new ServiceAccountCredential(
    new ServiceAccountCredential.Initializer(serviceAccountEmail) 
    { 
     Scopes = new[] { Google.Apis.Calendar.v3.CalendarService.Scope.Calendar }, 
    }.FromCertificate(certificate)); 
    BaseClientService.Initializer initializer = new 
    BaseClientService.Initializer() 
    { 
     HttpClientInitializer = credential, 
     ApplicationName = "Test App" 
    }; 
    Google.Apis.Calendar.v3.CalendarService calservice = new Google.Apis.Calendar.v3.CalendarService(initializer); 

    string timezone = System.TimeZone.CurrentTimeZone.StandardName; 
    var calendarEvent = new Event() 
    { 
     Reminders = new Event.RemindersData() 
     { 
      UseDefault = true 
     }, 
     Summary = title, 
     Description = description, 
     Location = location, 
     Start = new EventDateTime() 
     { 
      //DateTimeRaw = "2014-12-24T10:00:00.000-07:00", 
      DateTime = startDateTime, 
      TimeZone = "America/Phoenix" 
     }, 
     End = new EventDateTime() 
     { 
      //DateTimeRaw = "2014-12-24T11:00:00.000-08:00", 
      DateTime = endDateTime, 
      TimeZone = "America/Phoenix" 
     }, 
     Attendees = new List<EventAttendee>() 
     { 
      new EventAttendee() 
      { 
       DisplayName = "Joe Shmo", 
       Email = "[email protected]", 
       Organizer = false, 
       Resource = false 
      } 
     } 
    }; 
    var insertevent = calservice.Events.Insert(calendarEvent, URL); 
    var requestedInsert = insertevent.Execute(); 

ответ

0

Так я узнал, что для этой работы, Вы должны убедиться, что вы получаете доступ к google.Admin учетной записи для ссылки на учетной записи службы клиента идентификатор приложения, созданного Вами.

Другое дело, что помогает удостоверяется часовой пояс в следующем формате «Америка/Феникс»

Я успешно создали события с помощью учетной записи службы без аутентификации.

+0

У меня проблема с кодом, который точно такой же, как у вас. Я получаю «unauthorized_client», описание: «неавторизованный клиент или область в запросе.», Uri: «» сообщение об ошибке. Что вы имеете в виду, когда говорите: «Вам нужно убедиться, что вы заходите в учетную запись google.Admin для ссылки на учетную запись службы ID клиента созданного приложения»? –

1

У меня была та же проблема. Решение заключалось в том, чтобы добавить почтовый клиент, чье событие календаря вы хотите отправить.

Credential = new ServiceAccountCredential(
      new ServiceAccountCredential.Initializer(serviceAccountEmail) 
      { 
       Scopes = Scopes, 
       User = "[email protected]" 
      }.FromCertificate(certificate));