0

テスト コンソール アプリから Google カレンダーにイベントを追加しようとしています。Google API コンソールに登録した Web アプリケーションを介して、スコープ「https://www.googleapis.com/auth/calendar」の token_refresh を取得しました。この保存された token_refresh をテスト コンソール アプリで使用して、access_token を取得します。次に、持っている refresh_token に対応するユーザーのカレンダーにイベントを追加したいと思います。

したがって、次のように POST HttpWebRequest を作成します。

HttpWebRequest request = WebRequest.Create("https://www.googleapis.com/calendar/v3/calendars/" + calendarID + "/events") as HttpWebRequest; // Where calendarID is like joe@gmail.com
request.Headers.Add("Authorization", "Bearer " + access_token);
request.Headers.Add("Accept-Charset", "UTF-8");
request.Headers.Add("ContentType", "application/json");
request.ProtocolVersion = HttpVersion.Version11;
request.KeepAlive = false;
request.Method = "POST"; 

GoogleCalendarEvent anEvent = new GoogleCalendarEvent();
anEvent.start = new GoogleCalendarEventTime(DateTime.Today);
anEvent.end = new GoogleCalendarEventTime(DateTime.Today);            

string data = jsonSerializer.Serialize(anEvent); // jsonSerializer is a JavaScriptSerializer object
byte[] postData = Encoding.UTF8.GetBytes(data);
Stream ws = request.GetRequestStream();
ws.Write(postData, 0, postData.Length);
ws.Close();
WebResponse response = request.GetResponse(); // throws WebException The remote server returned an error: (400) Bad Request.
stream = new StreamReader(response.GetResponseStream());
string result = stream.ReadToEnd().Trim();

ヘルパー クラスは次のとおりです。

private class GoogleCalendar
{
    private string kind;
    private string etag;
    private string id;
    private string summary;
    private string timezone;
    private string accesrole;

    public string Kind 
    { 
      get {  return this.kind;}
      set { this.kind = value; }
    }

    public string Etag 
    {
       get { return this.etag; }
       set { this.etag = value; }             
    }

    public string ID 
    {
       get { return this.id; }
       set { this.id = value; } 
    }

    public string Summary 
    {
       get { return this.summary; }
       set { this.summary = value; }
    }

    public string TimeZone 
    {
       get { return this.timezone; }
       set { this.timezone = value; }
    }

    public string AccessRole 
    {
       get { return this.accesrole; }
       set { this.accesrole = value; } 
    }
}

private class GoogleCalendarEventTime
{
    private DateTime _date;

    public string date
    {
        get
        {
            return this._date.ToString("yyyy-mm-dd");
        }
    }

     public GoogleCalendarEventTime(DateTime time)
     {
         this._date = time;
     }
}

私の問題は、リクエストに対するレスポンスを取得しようとすると、Error 400 Bad request が表示されることです。このタイプのエラー コードは、POST が正しく構成されていない場合と、不明なエラーのプレースホルダーとして使用されます。

4

1 に答える 1

0

Google は.NET 用のクライアント ライブラリを提供しています。これにより、これがより簡単になります。Calendar API を使用してクライアント ライブラリを構成する方法については、こちら(そのページの .NET タブをクリックしてください) を参照してください。

この行は、API 呼び出しを行うために使用するサービス オブジェクトを構築します。

var service = new CalendarService();

残念ながら、Calendar API のすべての API メソッドで .NET を使用するための包括的なサンプルはありませんが、このクライアント ライブラリでサポートされているすべての API のリストを参照でき、その多くに例があります。使用パターンは、API 全体でほぼ同じです。

于 2012-07-27T22:56:26.453 に答える