Я пишу приложение WPF с C #, которое пытается выполнить вызов Google Cloud AutoML API с помощью HttpClient
.Я могу связаться с сервером, но всегда получаю ответ «Несанкционированный».Я изучил StackOverflow и документацию AutoML для любого намека на то, как правильно превратить запрос «CURL» в простой HTTP-запрос, который я могу выполнить программно в моем приложении C #, но не нашел ничего, что давало бы достаточное руководство для этоготочка (отсюда и мой вопрос).
Вот запрос CURL, который моделирует мой HTTP-запрос после:
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
https://automl.googleapis.com/v1beta1/projects/image-object-detection/locations/us-central1/models/MyProjectId:predict -d @request.json
Есть элементы этого запроса, которые я не могу понять, как перевестив C #, а именно Authorization: Bearer
компонент.Нужно ли как-то найти токен и добавить его в заголовок или что-то?Если да, как мне получить этот токен в виде строки?Похоже, это то, что я действительно застрял.
А вот код C #, который у меня фактически есть до этого момента.
public async Task<object> GetPrediction(string imagePath)
{
string apiKey = "MyApiKey";
string projectId = "MyProjectId";
HttpResponseMessage response;
byte[] img = File.ReadAllBytes(imagePath);
string jsonBody = "{\"payload\":{\"image\":{\"imageBytes\":\"" + Encoding.UTF8.GetString(imgBody) + "\"}}}";
string uri = $"https://automl.googleapis.com/v1beta1/projects/image-object-detection/locations/us-central1/models/{projectId}:predict?key={apiKey}";
string token = “MyToken”;
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, uri);
request.Headers.TryAddWithoutValidation("Content-Type", "application/json");
request.Headers.Authorization = new AuthenticarionHeaderValue(“Bearer”, token);
request.Content = new StringContent(jsonBody, Encoding.UTF8, "application/json");
response = await client.SendAsync(request);
return Task.FromResult(response);
}
Этот код в основном устанавливает контакт, затем явернуть 401 «неавторизованный» код состояния.Буду признателен за любые предложения или рекомендации, и если потребуется дополнительная информация, я был бы рад опубликовать больше.Спасибо!
Обновление:
Я изменил кодовый блок, чтобы включить предлагаемое изменение с Nkosi , но явсе еще вижу тот же код состояния 401.