我正在尝试在.NET中使用Google Calendar API,特别是我正在尝试获取事件列表。根据示例here,在不同的编程语言中,我需要创建一个“服务”对象和一个“事件”对象。但是,我无法找到这些对象中的任何一个或如何启动它们的明确解释。有人有解释吗?或者任何人都可以提供任何信息或给我一个链接到解释的位置?它不一定必须在.NET中
以下是Java中的示例:
String pageToken = null;
do {
events = service.events().list('primary').setPageToken(pageToken).execute();
List<Event> items = events.getItems();
for (Event event : items) {
System.out.println(event.getSummary());
}
pageToken = events.getNextPageToken();
} while (pageToken != null);
根据建议回答,我收到以下错误:
Could not load file or assembly 'Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.16.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
以下是代码,错误发生在credentials = Await...
行
Dim credential As UserCredential
Dim clientSecretsPath As String = Server.MapPath("~/App_Data/client_secret.json")
Dim scopes As IList(Of String) = New List(Of String)()
scopes.Add(CalendarService.Scope.Calendar)
Using stream = New System.IO.FileStream(clientSecretsPath, System.IO.FileMode.Open, System.IO.FileAccess.Read)
credential = Await GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets, scopes, "user", CancellationToken.None)
End Using
答案 0 :(得分:3)
GoogleWebAuthorizationBroker的问题在于,它会尝试启动新的Web浏览器实例,并在必须单击“授予”按钮的情况下获得授权。
显然,如果您在IIS下运行MVC项目,那么当代码尝试执行Web浏览器时,它会感到困惑!
我的解决方案:
下载.net示例项目:https://code.google.com/p/google-api-dotnet-client/source/checkout?repo=samples
构建并运行与您相关的项目之一(例如日历或云端硬盘)。不要忘记包含从云控制台下载的client_secret.json文件。
运行项目,它将在您的计算机上打开一个新的浏览器,您必须单击“授予”按钮。执行此操作然后您的MVC代码将起作用,因为它不会尝试打开Web浏览器来授予权限。
我不知道有任何其他方法可以将此权限授予SDK,但它对我很有帮助!
祝你好运。这花了我5个小时才弄明白。答案 1 :(得分:3)
运行VS2013时遇到同样的问题(我的项目使用.net45):
通过NuGet获取CalendarV3 API后,您只需手动将参考添加到:
...packages\Microsoft.Bcl.Async.1.0.165\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll
到项目中(因为它没有通过NuGet-Script自动插入)!
就是这样!也许@peleyal将来会纠正这个剧本;)
答案 2 :(得分:1)
请记住,此示例适用于Java。我的建议是做以下事情:
它基于上面的2个样本,我没有编译或测试它但它应该可以工作。
UserCredential credential;
using (var stream = new System.IO.FileStream("client_secrets.json",
System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { CalendarService.Scope.Calendar },
"user", CancellationToken.None);
}
// Create the service.
var service = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "YOUR APP NAME HERE",
});
var firstCalendar = (await service.CalendarList.List().ExecuteAsync()).Items().FirstOrDefault();
if (firstCalendar != null)
{
// Get all events from the first calendar.
var calEvents = await service.Events.List(firstCalendar.Id).ExecuteAsync();
// DO SOMETHING
var nextPage = calEvents.NextPage;
while (nextPage != null)
{
var listRequest = service.Events.List(firstCalendar.Id);
// Set the page token for getting the next events.
listRequest.PageToken = nextPage;
calEvents = await listRequest.EsecuteAsync();
// DO SOMETHING
nextPage = calEvents.NextPage;
}
}
答案 3 :(得分:0)
我遇到了同样的错误,这是由于应用尝试启动接受屏幕 我首先尝试从谷歌获取vb.net示例并运行它,我确实开始工作,并更改为我的秘密信息,运行并获得接受屏幕。我然后尝试了我的应用程序,它仍然无法正常工作。 我注意到这个dll是在我从nuget包安装的项目中找到的。
... packages\Microsoft.Bcl.Async.1.0.165\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll
但不在net45
目录中。所以我卸载了nuget软件包(如果更改.net版本必须更新)然后将我的项目的.net版本更改为4.0而不是4.5,重新安装nuget软件包,然后就可以了!!