Google Calendar API - Solicitação incorreta (400) Tentando trocar o código do token de acesso

Com um código de autorização do Google para acessar a agenda de um usuário, agora estou tentando trocar isso por um token de acesso. De acordo com seus próprios documentos:

A solicitação real pode se parecer com:

POST /o/oauth2/token HTTP/1.1
Host: accounts.google.com
Content-Type: application/x-www-form-urlencoded

code=4/v6xr77ewYqhvHSyW6UJ1w7jKwAzu&
client_id=8819981768.apps.googleusercontent.com&
client_secret={client_secret}&
redirect_uri=https://oauth2-login-demo.appspot.com/code&
grant_type=authorization_code

Minha tentativa de acessar isso é a seguinte (C #):

string url = "https://accounts.google.com/o/oauth2/token";
WebRequest request = HttpWebRequest.Create(url); 
request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 

string body = "code=<the_code_I_received>&\r\n"
    + "client_id=<my_client_id>&\r\n"
    + "client_secret=<my_client_secret>&\r\n"
    + "redirect_uri=http://localhost:4300\r\n"
    + "grant_type=authorization_code&\r\n"
                            ;
byte[] bodyBytes = Encoding.ASCII.GetBytes(body); 
request.ContentLength = bodyBytes.Length ; 
Stream bodyStream = request.GetRequestStream(); 
bodyStream.Write(bodyBytes, 0, bodyBytes.Length); 
bodyStream.Close(); 

try 
{
    request.GetResponse(); 

'http: // localhost: 4300' é exatamente o mesmo que eu fiz na solicitação original (e foi válido porque eu recebi o código novamente ao ouvir como um servidor Web nessa porta), mas também tentei apenas 'http : // localhost 'apenas por precaução.

Tentei várias sugestões, como definir o proxy como nulo (sem alteração) e alterar Aceitar (não era permitido adicionar esse cabeçalho à solicitação da web

Em cada caso, recebo de volta o HTTP 400 - bad request (a tentativa / captura é acionada com uma exceção declarando isso

Colocar uma barra após / token (tentarei qualquer coisa!) Resultou em um erro interno de 500 servidores, então também não fo

Alguma idéia do que estou fazendo de errado?

questionAnswers(2)

yourAnswerToTheQuestion