1

メールのIDを使用してユーザーのGoogleカレンダーの予定を削除します 次のコードを試してみてください。Googleカレンダーから予定を削除する

CalendarService service = new CalendarService(); 
          string calendarId = "primary"; 
          service.Events.Delete(calendarId, eventId).Execute(); 

しかし、それは例外

Google.Apis.Requests.RequestError 
Login Required [401] 
Errors [ 
    Message[Login Required] Location[Authorization - header] Reason[required] Domain[global] 
] 

どのように私はそれを達成し、例外を回避できますか?次のように私を与えますか

答えて

1

最初に認証する必要がある空のカレンダーサービスオブジェクトを作成することはできません。

var service = new CalendarService(new BaseClientService.Initializer() 
      { 
       HttpClientInitializer = credential, 
       ApplicationName = "Calendar Oauth2 Authentication Sample" 
      }); 

ユーザーの予定表にアクセスするためにOauth2を使用して資格情報を作成する必要があります。

/// <summary> 
    /// This method requests Authentcation from a user using Oauth2. 
    /// Credentials are stored in System.Environment.SpecialFolder.Personal 
    /// Documentation https://developers.google.com/accounts/docs/OAuth2 
    /// </summary> 
    /// <param name="clientSecretJson">Path to the client secret json file from Google Developers console.</param> 
    /// <param name="userName">Identifying string for the user who is being authentcated.</param> 
    /// <returns>DriveService used to make requests against the Drive API</returns> 
    public static CalendarService AuthenticateOauth(string clientSecretJson, string userName) 
    { 
     try 
     { 
      if (string.IsNullOrEmpty(userName)) 
       throw new ArgumentNullException("userName"); 
      if (string.IsNullOrEmpty(clientSecretJson)) 
       throw new ArgumentNullException("clientSecretJson"); 
      if (!File.Exists(clientSecretJson)) 
       throw new Exception("clientSecretJson file does not exist."); 

      // These are the scopes of permissions you need. It is best to request only what you need and not all of them 
      string[] scopes = new string[] { CalendarService.Scope.CalendarReadonly, //View your calendars 
              CalendarService.Scope.Calendar};   //Manage your calendars 
      UserCredential credential; 
      using (var stream = new FileStream(clientSecretJson, FileMode.Open, FileAccess.Read)) 
      { 
       string credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 
       credPath = Path.Combine(credPath, ".credentials/", System.Reflection.Assembly.GetExecutingAssembly().GetName().Name); 

       // Requesting Authentication or loading previously stored authentication for userName 
       credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets, 
                     scopes, 
                     userName, 
                     CancellationToken.None, 
                     new FileDataStore(credPath, true)).Result; 
      } 

      // Create Drive API service. 
      return new CalendarService(new BaseClientService.Initializer() 
      { 
       HttpClientInitializer = credential, 
       ApplicationName = "Calendar Oauth2 Authentication Sample" 
      }); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Create Oauth2 account CalendarService failed" + ex.Message); 
      throw new Exception("CreateServiceAccountCalendarFailed", ex); 
     } 
    } 

コードは、より多くのコードは、あなたがそれを必要とする場合にはそこにあるgithubに私のGoogleカレンダーのAPIサンプルプロジェクトからリッピング。

関連する問題