我们的网站需要从背后的代码(asp.net mvc应用程序)将视频上传到youtube。我正在尝试获取Google凭据,但是当我调用AuthorizeAsync时,应用程序将挂起。我到处都在寻找解决方案,但似乎没人帮忙。我已经在google上搜索了显而易见的内容,并且堆栈溢出。我发现的大多数内容都提到该应用程序可能无法访问appdata文件夹,因此我尝试将文件夹更改为c驱动器,d驱动器以及实际的inetpub位置。我进行了测试,发现我能够使应用程序写入这些位置。
具体来说,用户是我们的管理员,客户将视频上传到我们这里,并且管理员批准了这些视频。当管理员批准它们后,它就会发布在我们的YouTube帐户中。管理员无需执行任何操作,只需单击“批准”按钮即可。
为了解决这个问题,我该怎么做才能超越AuthorizeAsync?让我知道您是否需要更多信息
UserCredential credential;
GoogleWebAuthorizationBroker.Folder = "YouTube.Auth.Store";
using (var stream = new FileStream(CredentialsPath, FileMode.Open,
FileAccess.Read))
{
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(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,
new FileDataStore("YouTube.Auth.Store")
).Result;
}
最佳答案
找到了一种解决办法。
我改用GoogleAuthorizationCodeFlow。原来是这样的:
ClientSecrets secrets = new ClientSecrets()
{
ClientId = CLIENT_ID,
ClientSecret = CLIENT_SECRET
};
var token = new TokenResponse { RefreshToken = REFRESH_TOKEN };
var credentials = new UserCredential(new GoogleAuthorizationCodeFlow(
new GoogleAuthorizationCodeFlow.Initializer
{
ClientSecrets = secrets
}),
"user",
token);
var service = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credentials,
ApplicationName = "TestProject"
});