2011-07-13 127 views
2

獲取oauth2令牌我試圖通過使用GData和OAuth2.0服務器端(Check this link)訪問Google數據(聯繫人,編輯個人資料數據,日曆等),我完成了第一步,並獲得第一個代碼,當嘗試發佈請求以獲取oauth2_token時,我總是收到錯誤「遠程服務器返回錯誤:(400)錯誤請求。」 這裏是我使用的職位,返回OAuth2_token請求代碼:無法通過request.GetResponse()

string clientToken = Request.QueryString["code"]; 


     string post = 
      string.Format(
       @"code={0}&client_id={1}&client_secret={2}&redirect_uri=http://localhost/default.aspx&grant_type=authorization_code", 
       clientToken, Settings.ClientId, Settings.ClientSecret); 

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

     StreamWriter streamWriter = new StreamWriter(httpRequest.GetRequestStream()); 
     streamWriter.Write(post); 
     streamWriter.Flush(); 
     streamWriter.Close(); 

     var ss = (HttpWebResponse)httpRequest.GetResponse(); 
     Stream stream = ss.GetResponseStream(); 

任何幫助???我花了2天,直到現在正試圖解決,但白白:(

+0

您是否向Google註冊了重定向URI? – dtb

+0

您的意思是在Google API控制檯http://code.google.com/apis/console?是的,我做到了 –

回答

1

可能不會是REDIRECT_URI必須是URI編碼?

[https://groups.google.com/forum/#!主題/的oauth2-dev /目錄9xnn8nUIA2s]

1

我想你應該使用HttpUtility.UrlEncode編碼REDIRECT_URI參數

此外,您應該編碼的請求主體使用utf8編碼:

byte[] encoded = Encoding.UTF8.GetBytes(post); 
httpRequest.ContentLength = encoded.Length 

希望這有助於。