首页 > 解决方案 > 无法从 .net 核心授权 GCP Vertex 调用

问题描述

随着谷歌最近宣布 Vertex AI,我现在正试图调用我创建的端点。当我使用 c#(.net Core consol app)时,我能找到的唯一方法是使用 REST API:

https://us-central1-aiplatform.googleapis.com/v1alpha1/projects/${PROJECT_ID}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict

我的代码使用了我在 GCP 上创建的仅限于 Vertex AI API 的 API 密钥。

sVertexSearchPrm 变量包含以下 JSON:

{
  "instances": [{
    "content": "YOUR_IMAGE_BYTES"
  }],
  "parameters": {
    "confidenceThreshold": 0.5,
    "maxPredictions": 5
  }
}

这是代码:

            HttpClient client = Method_Headers(sVertexAPIKey, sVertexURI);
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, 
            Uri.EscapeUriString(client.BaseAddress.ToString()));
            request.Content = new StringContent(sVertexSearchPrm, Encoding.UTF8, "application/json");
            request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            HttpResponseMessage tokenResponse = await 
            
            client.PostAsync(Uri.EscapeUriString(client.BaseAddress.ToString()), request.Content);
            if (tokenResponse.IsSuccessStatusCode)
            {
                SearchResponse = tokenResponse.Content.ReadAsStringAsync().Result;
                return SearchResponse;
            }

以及设置标题的方法:

 private HttpClient Method_Headers(string apiKey, string endpointURL)
    {
        HttpClientHandler handler = new HttpClientHandler() { UseDefaultCredentials = false };
        HttpClient client = new HttpClient(handler);

        try
        {
            client.BaseAddress = new Uri(endpointURL);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Add("key", apiKey);
            //client.DefaultRequestHeaders.Add("Authorization", "Bearer " + apiKey);
        }
        catch (Exception ex)
        {
            return null;
        }
        return client;
    }

当我运行它时,我收到一个错误:

{StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 1.1, Content: }

我错过了什么?

阿维

标签: c#google-cloud-platform

解决方案


推荐阅读