我有一个C#.net网络应用程序,用于将视频上传到Youtube。这工作大约6个月前,但现在已停止工作。当我在本地计算机上通过Visual Studio启动我的网站时,以下代码就会挂起:
UserCredential credential;
using (var auth_stream = new FileStream(Server.MapPath("~/YouTube/client_secrets.json"), FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(auth_stream).Secrets,
// This OAuth 2.0 access scope allows an application to upload files to the
// authenticated user's YouTube channel, but doesn't allow other types of access.
new[] { YouTubeService.Scope.YoutubeUpload },
"user",
CancellationToken.None
);
}
在查看堆栈溢出的其他帖子后,我也尝试了以下内容:
UserCredential credentialS;
using (var auth_stream = new FileStream(Server.MapPath("~/YouTube/client_secrets.json"), FileMode.Open, FileAccess.Read))
{
credentialS = await GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets
{
ClientId = "blahblah-myDetailsBlahBLah.apps.googleusercontent.com",
ClientSecret = "myClientSecret",
},
// This OAuth 2.0 access scope allows an application to upload files to the
// authenticated user's YouTube channel, but doesn't allow other types of access.
new[] { YouTubeService.Scope.YoutubeUpload },
"user",
CancellationToken.None
);
}
我还注意到我使用的是Google API 1.7.0-beta版,因此我通过PackageManager控制台升级到版本1.8.2。
我还通过Google Developer Console生成了一个新的客户端密钥,并在我的网站中使用了它。
但在尝试这些步骤后,对 GoogleWebAuthorizationBroker.AuthorizeAsync 的调用仍然会挂起。 我注意到我的本地浏览器中的网站刷新,好像它试图连接但是电话永远不会成功。
我该如何解决这个问题?
答案 0 :(得分:1)
我也使用Google Calendar API遇到了这个问题。
我的应用程序正在从各种在线资源中删除通知,并将其发布到共享的Google日历。
它在开发环境中运行良好,但在我使用该VM中的服务帐户将其作为Windows计划任务每15分钟运行一次的VM时没有。
我记得在第一次设置时我必须通过浏览器中的授权步骤,但在作为计划任务运行时它不会被触发。
我找不到让它通过浏览器再次授予访问权限的方法。
由于服务帐户C:\ Users \\ Documents.credentials \ calendar-dotnet-quickstart文件夹创建得很好,我只是从同一文件夹中复制了Google.Apis.Auth.OAuth2.Responses.TokenResponse-user在我的开发环境中它现在运行正常。
这可能不是最好或最终的解决方案,但它确实有效。
我怀疑如果我以该服务用户身份登录计划任务并从命令提示符运行,我会通过浏览器提示授予该授权。
希望这有助于某人。