编写POST Http请求以添加Google Calendar API v3事件

时间:2012-07-24 10:52:14

标签: c# google-calendar-api

我正在尝试从测试控制台应用中向Google日历添加事件。 我通过我在Google API控制台注册的网络应用程序获得了范围“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;
     }
}

我的问题是,当我尝试获取请求的响应时,我收到错误400错误请求。这种类型的错误代码适用于POST构造错误和未知错误的占位符。

1 个答案:

答案 0 :(得分:0)

Google提供client library for .NET,这将使您更轻松。有关如何使用Calendar API配置客户端库的说明可用here(单击该页面上的.NET选项卡)。

这一行构造了您将用于进行API调用的服务对象:

var service = new CalendarService();

不幸的是,没有全面的示例将.NET与Calendar API的所有API方法一起使用,但是您可以看到此客户端库支持的所有API的list,其中许多都有例子。 API的使用模式几乎相同。