2014-01-21 7 views
0

Я пытаюсь получить токен доступа через oAuth (v2) Google. Я использую ASP.NET 4.0 Web Forms (C#). Проблема, с которой я сталкиваюсь, - это когда я отправляю свой HttpWebRequest, я получаю ошибку «Плохой запрос». Я использую код, который я нашел здесь (http://blog.movereem.nl/using-google-apis-through-oauth-20/). Это код, который у меня есть в моей странице. Локальное событие:Календарь Google oAuth Неверный запрос

  string strCode = ""; 
     string strClientID = "********.apps.googleusercontent.com"; 
     string strClientSecret = "**********"; 
     string strRedirectURI = "http://www.example.com"; 

     if (Request.QueryString["code"] != null && Request.QueryString["code"].ToString() != "") 
     { 
      strCode = Request.QueryString["code"].ToString(); 
      StreamWriter sw = new StreamWriter(Server.MapPath("~\\") + "code.txt"); 
      sw.WriteLine(Request.QueryString["code"].ToString()); 
      sw.Close(); 


      string queryStringFormat = "code={0}&redirect_uri={1}&client_id={2}&client_secret={3}&grant_type=authorization_code"; 
      string postcontents = string.Format(queryStringFormat 
               , HttpUtility.UrlEncode(strCode) 
               , HttpUtility.UrlEncode(strClientID) 
               , HttpUtility.UrlEncode(strClientSecret) 
               , HttpUtility.UrlEncode(strRedirectURI)); 
      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://accounts.google.com/o/oauth2/token"); 
      request.Method = "POST"; 
      byte[] postcontentsArray = Encoding.UTF8.GetBytes(postcontents); 
      request.ContentType = "application/x-www-form-urlencoded"; 
      request.ContentLength = postcontentsArray.Length; 
      using (Stream requestStream = request.GetRequestStream()) 
      { 
       requestStream.Write(postcontentsArray, 0, postcontentsArray.Length); 
       requestStream.Close(); 
       WebResponse response = request.GetResponse();//Error Happens Here 
       using (Stream responseStream = response.GetResponseStream()) 
       using (StreamReader reader = new StreamReader(responseStream)) 
       { 
        string responseFromServer = reader.ReadToEnd(); 
        reader.Close(); 
        responseStream.Close(); 
        response.Close(); 
        //return SerializeToken(responseFromServer); 
       } 
      } 
     } 

Любая помощь приветствуется. Благодарю.

ответ

0

На первый взгляд код выглядит в целом правильно, однако я думаю, что у вас есть string.Format аргументы в другом порядке, чем ваш queryStringFormat:

string queryStringFormat = "code={0}&redirect_uri={1}&client_id={2}&client_secret={3}&grant_type=authorization_code"; 
string postcontents = string.Format(queryStringFormat 
         , HttpUtility.UrlEncode(strCode) 
         // Redirect URI should be here (or switch the order above) 
         , HttpUtility.UrlEncode(strClientID) 
         , HttpUtility.UrlEncode(strClientSecret) 
         , HttpUtility.UrlEncode(strRedirectURI)); 
Смежные вопросы