YouTube API - API 密钥和身份验证凭据来自不同的项目

YouTube API - The API Key and the authentication credential are from different projects

我正在尝试使用我的 C# 应用程序从 youtube 获取视频,使用“https://youtube.googleapis.com/youtube/v3/search?forMine=true&order=date&type=video&part=snippet&key={key}& access_token={token}" 但我收到此错误:

"error": {
    "code": 400,
    "message": "The API Key and the authentication credential are from different 
projects.",
    "errors": [
      {
        "message": "The API Key and the authentication credential are from 
different projects.",
        "domain": "global",
        "reason": "badRequest"
      }
    ],
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.Help",
        "links": [
          {
            "description": "Google developer console API key",
            "url": 
"https://console.developers.google.com/project/{MyProjectCode}/apiui/credential"
          }
        ]
      },
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "CONSUMER_INVALID",
        "domain": "googleapis.com",
        "metadata": {
          "consumer": "projects/{MyProjectCode}",
          "service": "youtube.googleapis.com"
        }
      }
    ]
  }

但我在 https://console.cloud.google.com/apis/api/youtube.googleapis.com/credentials?authuser=1&project={MyProject} 站点

上只能看到 1 个 API 密钥和 1 个 OAuth 2.0 客户端 ID(带有客户端 ID 和客户端密码)

你能帮我解决这个问题吗?

代码:

var token = Helper.Decrypt(ytConn.AccessToken);
var url = "https://youtube.googleapis.com/youtube/v3/search? 
forMine=true&order=date&type=video&part=snippet&key=" + _key + 
"&access_token=" + token;

videos = Helper.GetFromAPI<Videos>(url, token);

它调用这个:

public static T GetFromAPI<T>(string url, string token)
{            
    WebRequest request = WebRequest.Create(url);
    request.Method = "GET";

    ServicePointManager.SecurityProtocol = 
    SecurityProtocolType.Tls12;
    request.Headers.Set("Authorization", "Bearer " + token);                

    request.ContentType = "application/json; charset=utf-8";

    T type = default(T);

    try
    {
        using (WebResponse response = request.GetResponse())
        {
            using (Stream dataStream = response.GetResponseStream())
            {
                using (StreamReader reader = new 
                StreamReader(dataStream))
                {
                    string responseFromServer = reader.ReadToEnd();
                    type = JsonConvert.DeserializeObject<T> 
                    (responseFromServer);
                }
            }
        }
    }
}

提前致谢

您已添加 API 密钥,需要 API 密钥才能访问 public 数据。他们实际上只需要将您的项目标识为 Google。您还在请求中包含了访问令牌。访问令牌用于访问私人用户数据。访问令牌还可以识别您的项目,因此从技术上讲您不需要两者。

您收到的错误消息

The API Key and the authentication credential are from different projects

表示您正在使用的 API 密钥来自 Google 云控制台上的一个项目,并且访问令牌是使用来自 google 云上另一个项目的客户端凭据创建的安慰。虽然您不需要两者,但没有什么能阻止您同时使用它们,但事实是它们需要来自同一个项目。

我怀疑您刚刚从代码中删除了关键部分。如果您要发送访问令牌,则无需密钥。

https://youtube.googleapis.com/youtube/v3/search? 
forMine=true&order=date&type=video&part=snippet + 
"&access_token=" + token;

您应该考虑使用 Google api .net 客户端库。

无需更改代码,有一天又开始工作了,所以很可能是 Youtube 方面的问题。