Я пытаюсь позвонить в службу аутентификации OAuth2 Google, согласно этим инструкциям: https://developers.google.com/accounts/docs/OAuth2ForDevicesWebRequest: Строка запроса данных против х-WWW-форм-urlencoded содержание
Я положил все необходимые параметры в строку запроса и послал запрос. Это сработало для раздела «Получение кода пользователя», но не для раздела «Получение токенов доступа и обновления».
После многократного поиска и получения ошибок 400 ошибок, я обнаружил, что вместо того, чтобы помещать данные в строку запроса, вы можете создать запрос с помощью FormUrlEncodedContent и отправить данные через контент с помощью приложения \ x-www -форма-urlencoded Content-Type.
Вот код перед:
var requestMessage = new HttpRequestMessage();
requestMessage.Method = "POST";
requestMessage.RequestUri = new Uri(fullUrl);
Где fullUrl это что-то вроде:
https://accounts.google.com/o/oauth2/device/code?client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile
И новый код:
var requestMessage = new HttpRequestMessage();
requestMessage.Method = "POST";
requestMessage.RequestUri = new Uri(url);
requestMessage.Content = new FormUrlEncodedContent(CreateDictionary(queryStringNames, queryStringValues));
Где Ссылка:
https://accounts.google.com/o/oauth2/device/code
и queryStringNames и queryStringValues - это строковые массивы имен и значений требуемых параметров.
В чем разница между этими двумя методами? Можно ли предположить, что все вызовы POST могут использовать запросы кодированного содержимого URL вместо того, чтобы помещать данные в строку запроса?