テスト コンソール アプリから 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 が正しく構成されていない場合と、不明なエラーのプレースホルダーとして使用されます。