2013-04-26 279 views
0

我想实现谷歌的的oauth2在内部应用程序,并在这里发现使用C#控制台应用程序演示播放:的oauth2:远程服务器返回错误:(400)错误的请求

https://code.google.com/p/google-gdata/source/browse/trunk/clients/cs/samples/oauth2_sample/oauth2demo.cs

我添加了所有必要的谷歌API库,我的项目(核心客户,YouTube上,联系人......),注册我的应用程序... ..

当我执行程序我能够找回访问代码从授权客户端等......我使用正确的clientID,ClientSecret键......。

我最终最终得到一个异常:远程服务器返回一个错误:(400)错误的请求。

从此方法抛出:

public static void GetAccessToken(OAuth2Parameters parameters) { 
     OAuthBase.GetOAuth2AccessToken(parameters, OAuthBase.GetExchangeAccessCodeRequestBody(parameters)); 
    } 

的呼叫:

公共静态无效GetOAuth2AccessToken(OAuth2Parameters参数,字符串requestBody){ 乌里requestUri =新URI(parameters.TokenUri); WebRequest请求= WebRequest.Create(requestUri); request.Method =“POST”;

 request.ContentType = "application/x-www-form-urlencoded"; 

     Stream outputStream = request.GetRequestStream(); 
     StreamWriter w = new StreamWriter(outputStream); 
     w.Write(requestBody); 
     w.Flush(); 
     w.Close(); 

     WebResponse response = request.GetResponse(); 
     string result = ""; 
     if (response != null) { 
      Stream responseStream = response.GetResponseStream(); 
      StreamReader reader = new StreamReader(responseStream); 
      result = reader.ReadToEnd(); 

      Dictionary<string, string> dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(result); 

      if (dict.ContainsKey(OAuth2AccessToken)) { 
       parameters.AccessToken = dict[OAuth2AccessToken]; 
      } 
      if (dict.ContainsKey(OAuth2RefreshToken)) { 
       parameters.RefreshToken = dict[OAuth2RefreshToken]; 
      } 
      if (dict.ContainsKey(OAuth2TokenType)) { 
       parameters.TokenType = dict[OAuth2TokenType]; 
      } 
      if (dict.ContainsKey(OAuth2ExpiresIn)) { 
       parameters.TokenExpiry = DateTime.Now.AddSeconds(int.Parse(dict[OAuth2ExpiresIn])); 
      } 
     } 
    } 

有人能解释一下可能会导致下面的错误吗?

System.Net.WebException was unhandled 
    HResult=-2146233079 
    Message=The remote server returned an error: (400) Bad Request. 
    Source=System 
    StackTrace: 
     at System.Net.HttpWebRequest.GetResponse() 
     at Google.GData.Client.OAuthBase.GetOAuth2AccessToken(OAuth2Parameters parameters, String requestBody) in c \Development\lib\YouTube\libgoogle-data-mono-2.1.0.0\src\core\oauthbase.cs:line 435 
     at Google.GData.Client.OAuthUtil.GetAccessToken(OAuth2Parameters parameters) in c:\ \lib\YouTube\libgoogle-data-mono-2.1.0.0\src\core\oauthutil.cs:line 246 
     at GoogleAppsConsoleApplication.OAuth2Demo.Main(String[] args) in c:\Users\test\Documents\Visual Studio 2012\Projects\GoogleAppsConsoleApplication\GoogleAppsConsoleApplication\Program.cs:line 60 
     at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
     at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
     at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: 

回答

相关问题