我正在开发一项服务,该服务应该能够使用服务帐户将日历事件插入到来自不同谷歌应用程序域的用户日历中。一切都很好,但我在使用Google API初始化服务时遇到了一个小问题。谷歌API中描述的初始化看起来像这样:
string[] scopes = new string[] { CalendarService.Scope.Calendar };
var certificate = new X509Certificate2(SERVICE_ACCOUNT_PKCS12_FILE_PATH, "notasecret", X509KeyStorageFlags.Exportable);
try
{
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(SERVICE_ACCOUNT_EMAIL)
{
User = user,
Scopes = scopes
}.FromCertificate(certificate));
CalendarService service = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
});
return service;
}
catch (Exception ex)
{
return null;
}
我遇到的问题是,在实际尝试插入任何事件之前,我希望能够检查CalendarService是否已连接。然而,提供的代码片段并不运行任何底层网络通信,它只是初始化服务。整个身份验证过程发生在执行事件时,例如:var eventResult = newEventRequest.Execute();
在创建任何事件(检查HttpRequestException、TokenResponseException等)之前,有没有什么好的方法可以检查服务是否真的连接了?我能想到的唯一解决方案是插入一个简单的事件,然后立即删除它,或者根本不使用Google API。
提前谢谢。
尝试提前刷新令牌,如下所示:
if(credential.RequestAccessTokenAsync(CancellationToken.None).Result)
{
AuthenticationKey = credential.Token.AccessToken;
}
这将尝试刷新访问令牌,本质上为您提供检查服务连接的方法。