我们的网站需要从背后的代码(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"
        });

10-08 18:39