C# 使用SDK nuget软件包下载YouTube v3 API标题

C# 使用SDK nuget软件包下载YouTube v3 API标题,c#,.net,youtube-api,google-api-dotnet-client,closed-captions,C#,.net,Youtube Api,Google Api Dotnet Client,Closed Captions,我正在尝试使用YouTube API v3()和官方的.NET SDK nuget软件包(,版本1.9.0.1360)下载字幕曲目 返回的流包含以下文本: 在查询字符串中接收到OAuth令牌,此API禁止对JSON或XML以外的响应格式使用该字符串。如果可能,请尝试在授权标头中发送OAuth令牌 而不是我刚刚上传的SRT纯文本内容,并通过YouTube.com用户界面手动验证 我找到了错误类型:LockedDomainIncremarationFailure 我的代码: ...

我正在尝试使用YouTube API v3()和官方的.NET SDK nuget软件包(,版本1.9.0.1360)下载字幕曲目

返回的流包含以下文本:

在查询字符串中接收到OAuth令牌,此API禁止对JSON或XML以外的响应格式使用该字符串。如果可能,请尝试在授权标头中发送OAuth令牌

而不是我刚刚上传的SRT纯文本内容,并通过YouTube.com用户界面手动验证

我找到了错误类型:LockedDomainIncremarationFailure

我的代码:

    ...
        _service = new YTApi.YouTubeService(new BaseClientService.Initializer {
            ApplicationName = config.AppName,
            ApiKey = config.DeveloperKey
        });
    ...

    public Stream CaptionsDownload(
        string accessToken,
        string trackId
        )
    {
        var request = _service.Captions.Download(trackId);
        request.OauthToken = accessToken;
        request.Tfmt = YTApi.CaptionsResource.DownloadRequest.TfmtEnum.Srt;

        var trackStream = new MemoryStream();
        request.Download(trackStream);
        trackStream.Position = 0;

        return trackStream;
    }
我似乎找不到在_service.HttpClient上设置任何标题的方法,我想我不应该手动设置。我希望DownloadRequest(或YouTubeBaseServiceRequest)将

/// <summary>
/// OAuth 2.0 token for the current user.
/// </summary>
[RequestParameter("oauth_token", RequestParameterType.Query)]
public virtual string OauthToken { get; set; }
//
///当前用户的OAuth 2.0令牌。
/// 
[RequestParameter(“oauth_令牌”,RequestParameterType.Query)]
公共虚拟字符串OauthToken{get;set;}
输入正确的授权标头。我没有看到在1.9.0.1360版本中实现这一点

也许我忽略了什么?非常感谢您的帮助


注意:我在这个SDK中使用了其他与标题相关的方法,而“下载”是我唯一遇到问题的方法。

您在没有用户凭据的情况下初始化了服务(您只使用了API密钥)。查看我们网站中的一个示例,(并选择正确的流程…您是否使用已安装的应用程序、windows phone等?)

您必须更改创建服务的方式,才能执行以下操作:

        UserCredential credential;
        using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
        {
            credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                new[] { YoutubeService.Scope.<THE_RIGHT_SCOPE_HERE> },
                "user", CancellationToken.None);
        }

        // Create the service.
        _service = new YouTubeService(new BaseClientService.Initializer {
        ApplicationName = config.AppName,
                HttpClientInitializer = credential,
                ApplicationName = "Books API Sample",
            });
UserCredential凭证;
使用(var stream=newfilestream(“client_secrets.json”、FileMode.Open、FileAccess.Read))
{
凭证=等待GoogleWebAuthorizationBroker.AuthorizationAsync(
GoogleClientSecrets.Load(stream.Secrets),
新[]{YoutubeService.Scope.},
“用户”,取消令牌。无);
}
//创建服务。
_服务=新的YouTube服务(新的BaseClientService.Initializer{
ApplicationName=config.AppName,
HttpClientInitializer=凭证,
ApplicationName=“Books API示例”,
});

然后,对于youtube服务的每个请求,您的OAuth访问令牌将作为HTTP请求本身的附加头包含。

我使用服务器应用程序,并且我的OAuth2流在v3出现之前已经实现,我开始使用SDK。auth代理对我不起作用-我同意。