Я пытаюсь настроить автономный доступ для приложения Google Analytics API с помощью OAuth2 и использую ASP.NET для POST моего кода авторизации в обмен на токен обновления, но я не могу получить ответ от сервера, чтобы дать мне токен обновления.
Я использовал пример кода из документации MSDN для почтового запроса, поэтому я могу только предположить, что это правильно, однако я получаю сообщение об ошибке «Удаленный сервер вернул ошибку: (400) Неверный запрос в System.Net .HttpWebRequest.GetResponse()":
using System;
using System.IO;
using System.Net;
using System.Text;
WebRequest request = WebRequest.Create ("https://accounts.google.com/o/oauth2/token?code=xxxmyauthorizationcodexxx&client_id=xxxxxxxxx.apps.googleusercontent.com&client_secret=xxxxxxxxxxxx&redirect_uri=https://mysite.com/oauth2callback&grant_type=authorization_code");
request.Method = "POST";
string postData = "code=xxxmyauthorizationcodexxx&client_id=xxxxxxxxx.apps.googleusercontent.com&client_secret=xxxxxxxxxxxx&redirect_uri=https://mysite.com/oauth2callback&grant_type=authorization_code";
byte[] byteArray = Encoding.UTF8.GetBytes (postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream ();
dataStream.Write (byteArray, 0, byteArray.Length);
dataStream.Close ();
WebResponse response = request.GetResponse ();
dataStream = response.GetResponseStream ();
StreamReader reader = new StreamReader (dataStream);
string responseFromServer = reader.ReadToEnd ();
reader.Close ();
dataStream.Close ();
response.Close ();
Я успешно использовал метод GET для получения кода авторизации для начала, и я следую этой документации: https://developers.google.com/accounts/docs/OAuth2WebServer#handlingtheresponse
Я также использую веб-сайт https для выполнения запросов и вручную обновляю свой код авторизации по истечении срока его действия. У кого-нибудь есть решение этой проблемы?
РЕДАКТИРОВАТЬ: Для тех, кто испытывает ту же проблему, сначала посмотрите на ответ aeijdenberg ниже, но мое решение заключалось в том, что срок действия кода авторизации, который я использовал для параметров кода, истекает практически мгновенно - я продолжал обновлять свою страницу, не запрашивая новую. Чтобы получить данные, просто отобразите содержимое переменной responseFromServer.