我正在编写一个 C# 桌面应用程序,可以将其输出复制到用户的 Google Drive。但是,当我尝试使用 GoogleWebAuthorizationBroker.AuthorizeAsync() 授权访问 Google 时,如果用户关闭浏览器中的身份验证页面,则该方法永远不会返回!
即使我使用 30 秒取消 token ,如果浏览器关闭,它也永远不会返回。
public bool Authorise()
{
_authorised = false;
UserCredential credential = null;
try
{
// here is where we Request the user to give us access, or use the Refresh Token that was previously stored in %AppData%
CancellationTokenSource cts = new CancellationTokenSource(new TimeSpan(0,0,30));
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets { ClientId = this.ClientId, ClientSecret = this.ClientSecret },
Scopes,
UserName,
cts.Token,//CancellationToken.None,
new FileDataStore(AppName)).Result;
}
catch (Exception)
{
return _authorised;
}
if ((credential != null) && (credential.Token.AccessToken != null))
{
Service = new DriveService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = AppName, });
_authorised = true;
}
return _authorised;
}
如何让用户关闭浏览器窗口并停止我的应用程序挂起?
最佳答案
这是 Google .net 客户端库中的一个已知问题。
目前没有我知道的解决方法。我建议将您的姓名添加到论坛上的问题中,以鼓励团队解决该问题。
更新:它现在在列表中 GoogleWebAuthorizationBroker does not honour CancellationToken when waiting for browser response
关于c# - 如果浏览器关闭,GoogleWebAuthorizationBroker.AuthorizeAsync() 会挂起,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43136455/