2012-06-14 2 views
2

Когда я запускаю этот код для вызова API Google, все, что я получаю, является ошибкой «Плохой запрос», но я не знаю, где я ошибаюсь.C# WebRequest к неправильному запросу API API

Код не возвращен без проблем на странице авторизации в Google, это когда код попадает на приведенную ниже часть, в которой он терпит неудачу. Может, кто-нибудь скажет мне, где я здесь ошибся?

Я знаю, что для этого есть библиотеки, но я пытаюсь понять, как это сделать RESTful как учебное упражнение.

Благодаря

var code = Request.QueryString["code"]; 

    var accessToken = string.Empty; 
    var req0 = WebRequest.Create("https://accounts.google.com/o/oauth2/token"); 
    req0.Method = "POST"; 
string postData = string.Format("code={0}&client_id={1}&client_secret={2}&redirect_uri=  {3}&grant_type=authorization_code", 
code, //the code i got back 
"xxxx.apps.googleusercontent.com", 
"xxx", 
Url.Encode("http://localhost/home/callback") 
); //my return URI 

byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
req0.ContentType = "application/x-www-form-urlencoded"; 
req0.ContentLength = byteArray.Length; 
using (Stream dataStream = req0.GetRequestStream()) 
{ 
dataStream.Write(byteArray, 0, byteArray.Length); 
dataStream.Close(); 
     } 
     try 
     { 
      using (WebResponse response = req0.GetResponse()) 
      { 
       using (var dataStream = response.GetResponseStream()) 
       { 
        using (StreamReader reader = new StreamReader(dataStream)) 
        { 
         string responseFromServer = reader.ReadToEnd(); 
         var ser = new JavaScriptSerializer(); 
         accessToken = ser.DeserializeObject(responseFromServer).ToString(); 
        } 
       } 
      } 
     } 
     catch (WebException wex) 
     { 
      Debug.WriteLine(wex.ToString()); 
     } 
     catch (Exception ex) 
     { 
      Debug.WriteLine(ex.ToString()); 

     } 
+0

Вы просмотрели запрос на провод, например. с Wireshark? –

+0

Привет, Джон, я посмотрел на него в Fiddler, но это по https, поэтому я не уверен, что я могу почерпнуть из него? –

+0

Крысы, я не заметил HTTPS-ness. Вы хотя бы проверили, что 'postData' выглядит разумным? –

ответ

0

В API Google очень привередливы, когда дело доходит до того, что вы вошли в API консоли для вашего идентификатора клиента вернуть URI, и то, что вы вводите в своем коде, чтобы назвать его.

Мне не хватало задней косой черты. Это все. Извлеченный урок ...

Спасибо Jon и Sandeep за помощь в том, чтобы указать мне в правильном направлении, сравнив то, что было в сетевом трафике, и что я должен был отправлять.

Смежные вопросы