C # - логин с Amazon oauth2 - ошибка при выполнении POST-запроса - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь сделать POST-запрос к Amazon API, чтобы получить токен для входа в систему с Amazon.Я делаю это с Xamarin.

Что мне нужно, так это ответ Амазонки с токеном.Я пробовал это в соответствии с этим руководством:

Связывание на основе кода (CBL) для устройств Amazon Alexa

При использовании Postman все работает нормально, я получаю правильный ответ.Когда я пытаюсь реализовать это в своем проекте Xamarin, я всегда получаю сообщение об ошибке:

«error_description»: «Тип контента не поддерживается сервером авторизации.», «Error»: «invalid_request»

Вот мой код:

client = new HttpClient();
client.BaseAddress = new Uri("https://api.amazon.com/auth/O2/create/codepair");

string contentRaw = "response_type=device_code&client_id=hereIsTheClient_ID&scope=alexa:all";
var content = new StringContent(contentRaw, Encoding.UTF8, "application/x-www-form-urlencoded");
string uriEncoded = Uri.EscapeDataString(contentRaw);
HttpResponseMessage response = await client.PostAsync("https://api.amazon.com/auth/O2/create/codepair", content);
var result = await response.Content.ReadAsStringAsync();
return result;

Вот что я сделал с помощью JSON, но я все еще получаю «Content-Type не поддерживается сервером авторизации»

 O2authRequest o2AuthRequest = new O2authRequest();
 o2AuthRequest.response_type = "device_code";
 o2AuthRequest.client_id = "amzn1.application-oa2-client....";
 o2AuthRequest.scope = "alexa:all";
 o2AuthRequest.scope_data = new Scope_Data(); 
 o2AuthRequest.scope_data.productID = "MyAppID";
 o2AuthRequest.scope_data.productInstanceAttributes = new Productinstanceattributes();
 o2AuthRequest.scope_data.productInstanceAttributes.deviceSerialNumber = "12345";
 string contentRaw = JsonConvert.SerializeObject(o2AuthRequest);

 var content = new StringContent(contentRaw, Encoding.UTF8, "application/json");
 string uriEncoded = Uri.EscapeDataString(contentRaw);

 HttpResponseMessage response = await client.PostAsync("https://api.amazon.com/auth/O2/create/codepair", content);
 var result = await response.Content.ReadAsStringAsync();
...