Google Calendar API - Solicitud incorrecta (400) Intentando intercambiar código por token de acceso

Tener un código de autorización de Google para acceder al calendario de un usuario, ahora estoy tratando de cambiarlo por un token de acceso. Según sus propios documentos:

La solicitud real podría verse así:

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

Mi intento de acceder a esto es el siguiente (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' es exactamente lo mismo que puse en la solicitud original (y fue válido porque recuperé el código al escucharlo como un servidor web en ese puerto), pero también intenté simplemente 'http : // localhost 'por si acaso.

ntenté varias sugerencias, como establecer el proxy en nulo (sin cambios) y cambiar Aceptar (no se permitió agregar ese encabezado a la solicitud web).

En cada caso recibo el HTTP 400 - solicitud incorrecta (el try / catch se dispara con una excepción que lo indica).

Poner una barra diagonal después de / token (¡intentaré cualquier cosa!) Resultó en un error interno del servidor 500, por lo que tampoco fue eso.

¿Alguna idea de lo que estoy haciendo mal?

Respuestas a la pregunta(2)

Su respuesta a la pregunta