Google Calendar API - 不从Execute()返回C#

时间:2015-11-09 21:07:20

标签: c# google-api google-calendar-api google-api-dotnet-client

运行下面的代码永远不会从Execute函数返回。我在个人Gmail帐户上有一个私人日历,我与developer.gserviceaccount.com帐户共享。

查看API Manager,使用/引用表明我已经使用过甚至点击了api。

任何想法都赞赏。

using System.Security.Cryptography.X509Certificates;
using System.Web;
using Google.Apis.Calendar.v3;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;

public class GoogleLoginWithServiceAccount
{
    public string getEventList()
    {
        var GoogleOAuth2CertificatePath = HttpContext.Current.Server.MapPath("~/xx/xx.p12");
        var GoogleOAuth2EmailAddress = "xx-xxxx@developer.gserviceaccount.com";
        var GoogleOAuth2PrivateKey = "notasecret";

        var certificate = new X509Certificate2(GoogleOAuth2CertificatePath,
        GoogleOAuth2PrivateKey, X509KeyStorageFlags.Exportable);
        var credential = new ServiceAccountCredential(
            new ServiceAccountCredential.Initializer(GoogleOAuth2EmailAddress)
            {
                //User = GoogleAccount,
                Scopes = new string[] { CalendarService.Scope.Calendar }
            }.FromCertificate(certificate));

        // Create the service.
        var service = new CalendarService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "Testing"
        });
        var listRequest = service.CalendarList.List();

        return listRequest.Execute().ToString();        
    }    
}

我还在遇到这个问题。我已经创建了一个简单的应用程序来重现这一点,任何人都有任何想法? dropbox.com/s/g45xcta7ii3hj51/GoogleTestWeb.zip?dl=0

2 个答案:

答案 0 :(得分:1)

问题在https://github.com/google/google-api-dotnet-client/issues/606中有更详细的描述。似乎我们目前在1.9.3中有一个错误,该错误在github存储库中修复(修复本身在https://github.com/google/google-api-dotnet-client/pull/612中)。

计划在未来几周推出新版本,敬请关注; http://google-api-dotnet-client.blogspot.com/

如果您同时想要自己玩和测试,可以使用GitHub中的项目和Calendar Service。最好从https://developers.google.com/resources/api-libraries/download/calendar/v3/csharp下载日历服务以避免绑定重定向。我在#606中解释了你要做的事情。


更新(12月15日):可以获得1.10.0的新NuGet包,详情请参阅:http://google-api-dotnet-client.blogspot.com/2015/12/announcing-release-of-1100.html

答案 1 :(得分:0)

日历和日历之间存在差异。在Google日历网站中,calendarlist左侧显示日历列表。但是,要在calendarlist上显示日历,必须将其添加到日历表中。

您为服务帐户授予了对日历的访问权限,但您是否以编程方式告诉它将日历添加到其日历表中?您应该使用CalendarList: insert

我不确定你为什么想要获得日历。就个人而言,我认为您应该使用Calendars: get来了解您已经知道Google日历网站上的日历ID。

提示:执行将返回一个我不确定的对象.ToString()就是最好的主意。

更新代码:

/// <summary>
        /// Returns metadata for a calendar. 
        /// Documentation:https://developers.google.com/google-apps/calendar/v3/reference/calendars/get
        /// </summary>
        /// <param name="service">Valid Autenticated Calendar service</param>
        /// <param name="id">Calendar identifier.</param>
        /// <returns>Calendar resorce: https://developers.google.com/google-apps/calendar/v3/reference/calendars#resource </returns>
        public static Calendar get(CalendarService service, string id)
        {
            try
            {
               return service.Calendars.Get(id).Execute();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return null;
            }
        }
来自GitHub

上的我的示例项目的

代码

enter image description here