1

私のアプリケーションにサインインしたユーザーのカレンダーイベントにアクセスしたいのですが、私のアプリケーションからイベントを作成できるようにするにはGoogleの宣誓を使用してください。 ASP.NET C#を使用してこれを行うにはどうすればよいですか?GoogleカレンダーAPIイベントの作成/取得 - C#

私は以下のURLで カレンダーAPIプロジェクトの作成プロセス中に作成されたクライアントID /秘密鍵を使用して、私のカレンダーイベントにアクセスすることができます。

https://console.developers.google.com/flows/enableapi?apiid=calendar&pli=1

すべてのヘルプやサンプルコードが認識されます。

UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(

    new ClientSecrets 
    { 
                    ClientId = "Client-Id", 
                    ClientSecret = "Client-Secret", 
                }, 
                new[] { CalendarService.Scope.CalendarReadonly }, 
                "user", 
                CancellationToken.None).Result; 

        

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

            CalendarListResource.ListRequest cal = service.CalendarList.List(); 
            cal.MaxResults = 100; 
            
               var calresult = cal.Execute().Items; 
            
            
            List<EventDetails> ed = new List<EventDetails>(); 
  
                foreach (CalendarListEntry entry in calresult) 
                { 
                   EventsResource.ListRequest request = service.Events.List(entry.Id); 
                        request.TimeMin = Convert.ToDateTime("03/01/2015"); 
                        request.ShowDeleted = false; 
                        request.SingleEvents = true; 
                        request.MaxResults = 200; 
                        request.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime; 

                        // List events. 
                        Events events = request.Execute(); 
                } 

ありがとう:

は、ここで私が使用私のコードです。

+0

通常、ここに明確に定義された問題が投稿されます。 "これはこのエラーを投げている"、 "私はXをしようとするとY、私はZをする必要があります"。いくつかのコードを書いたようですが、何が問題なのですか? – Seano666

+0

このコードは自分のカレンダーの予定をプルするGoogleアカウントで動作しますが、他のメールアドレスを使用すると権限が拒否されます。 – user5863509

+0

もう1つの問題は、ローカルマシンでoauthを使用して自分のアカウントを使用してカレンダーイベントにアクセスできますが、サーバーに同じコードをデプロイするとこのエラーが発生します。 "System.AggregateException:1つ以上のエラーが発生しました - System.UnauthorizedAccessException: 'Google.Apis.Auth'へのアクセスが拒否されました" – user5863509

答えて

1

認証:

あなたのコードを実行すると、次のコードがポップアップし、ユーザーがアプリケーションを認証要求します。

UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(

new ClientSecrets 
{ 
       ClientId = "Client-Id", 
       ClientSecret = "Client-Secret", 
      }, 
      new[] { CalendarService.Scope.CalendarReadonly }, 
      "user", 
      CancellationToken.None).Result; 

ここでのキーは、デフォルトでは「ユーザー」です。ライブラリは、資格情報をマシンの%appdata%ディレクトリに保存します。あなたがアクセスしたいデータを持っている各ユーザーは、自分のアカウントへのアクセスを許可する必要があります。

コメントの誤り:他のメールアドレスを使用すると、許可が拒否されました。

私はあなたがこの他のメールアドレスを供給している場所がわからないですが、あなたは、ユーザー玉葉は、あなたが

にアクセスしたいアカウントをごが認証されていることを確認するためにあなたのコード内で「ユーザー」に変更されていることを確認してくださいパス「Google.Apis.Auth」へのコメントAccessから

エラーが拒否された」デフォルトのfiledatastore店によって

は、%APPDATA%フォルダ内のクレデンシャルそれは言ったフォルダへのアクセス権を持っていない、サーバーのように聞こえます。私はそれを変更する方法を説明する記事がありますFileDatastore demystified

範囲:

範囲はあなたがCalendarService.Scope.CalendarReadonlyだけあなたがユーザーに読み取り専用アクセスを与えるために起こっているでしょうアクセスの種類を表し

注意を占める:私はないですあなたのカレンダーにアクセスし、ユーザーのカレンダーにアクセスすることが何を意味するのかを確かめてください。それらにカレンダーへのアクセスを許可するには、サービスアカウントを使用する必要があります。

+0

こんにちは、これで私を助けてくれますか?私は以下の詳細情報を掲載しました。ありがとう。 – user5863509

+0

次のコードで使用されますが、サーバーが応答しません。使用(VARストリーム= 新規のFileStream(clientSecretsJsonFilePath、FileMode.Open、FileAccess.Read)) {資格= GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(ストリーム).Secrets、 スコープ、 "ユーザ"、CancellationToken。なし、 新しいFileDataStore(credPath、true))。結果。 } – user5863509

+0

FiledatestoreのDrive.Api.Auth.Storeを追加しようとしましたが、次のエラーが表示されます。 "パス 'Drive.Api.Auth.Store'へのアクセスが拒否されました。 – user5863509

関連する問題