我正在尝试从测试控制台应用中向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构造错误和未知错误的占位符。
答案 0 :(得分:0)
Google提供client library for .NET,这将使您更轻松。有关如何使用Calendar API配置客户端库的说明可用here(单击该页面上的.NET选项卡)。
这一行构造了您将用于进行API调用的服务对象:
var service = new CalendarService();
不幸的是,没有全面的示例将.NET与Calendar API的所有API方法一起使用,但是您可以看到此客户端库支持的所有API的list,其中许多都有例子。 API的使用模式几乎相同。