Как вызвать Google Cloud API с помощью RestSharp и OAuth 2
Я пытаюсь вызвать Google Cloud API. В частности, языковой API из C# с использованием библиотеки RestSharp и OAuth 2. Я могу успешно подключиться к API с помощью вызова curl ниже:
curl -s -k -H "Content-Type: application/json" -H "Authorization: Bearer <access_token>"
https://language.googleapis.com/v1beta1/documents:annotateText
-d @c:\temp\entity_request.json > c:\temp\googleanalysis.json
Я пробовал несколько разных способов аутентификации, но ни один из них до сих пор не работал. Мой последний код на C# выглядит следующим образом:
var client = new RestClient("https://language.googleapis.com");
client.Authenticator = new RestSharp.Authenticators.HttpBasicAuthenticator("client-app", "<access_token>");
var request = new RestRequest("/v1beta1/documents:analyzeEntities", Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddFile("filename", @"c:\temp\entity_request.json");
var response = client.Execute(request);
var content = response.Content;
Когда я запускаю этот вызов из C#, я получаю следующую ошибку:
{
"error": {
"code": 403,
"message": "The request cannot be identified with a client project. Please pass a valid API key with the request.",
"status": "PERMISSION_DENIED"
}
}
У меня вопрос, как правильно назвать облачный API Google в RestSharp так, как я успешно справляюсь с curl?
0 ответов
Это работает для меня:
//obtenemos el token para las peticiones
string access_token = GetAccessToken(jsonFolder, new string[] { "https://www.googleapis.com/auth/cloud-platform" });
//peticiones hacia el rest de automl
var client = new RestClient("https://language.googleapis.com");
var request = new RestRequest("v1/documents:analyzeEntities", Method.POST);
request.AddHeader("Authorization", string.Format("Bearer {0}", access_token));
request.AddHeader("Content-Type", "aplication/json");
//seteamos el objeto
var aml = new AutoMLload_entities();
aml.document.content = text;
request.AddJsonBody(aml);
IRestResponse response = client.Execute(request);
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{