Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Oauth2:远程服务器返回错误:(400)请求错误_C#_.net_Oauth 2.0_Google Api Dotnet Client - Fatal编程技术网

C# Oauth2:远程服务器返回错误:(400)请求错误

C# Oauth2:远程服务器返回错误:(400)请求错误,c#,.net,oauth-2.0,google-api-dotnet-client,C#,.net,Oauth 2.0,Google Api Dotnet Client,我想在一个内部应用程序中实现Google的Oauth2,并使用一个C#console应用程序玩这里的演示: 我已经将所有必要的Google API库添加到我的项目中(核心客户端、YouTube、联系人……),并注册了我的应用程序 当我执行程序时,我能够从授权客户端等处获取访问代码……我使用的是正确的clientID、ClientSecret密钥 我最终得到了一个异常:远程服务器返回了一个错误:(400)错误请求 从该方法引发: public static void GetAccessT

我想在一个内部应用程序中实现Google的Oauth2,并使用一个C#console应用程序玩这里的演示:

我已经将所有必要的Google API库添加到我的项目中(核心客户端、YouTube、联系人……),并注册了我的应用程序

当我执行程序时,我能够从授权客户端等处获取访问代码……我使用的是正确的clientID、ClientSecret密钥

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

从该方法引发:

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

公共静态void GetOAuth2AccessToken(OAuth2Parameters参数,字符串requestBody){ Uri requestUri=新Uri(parameters.TokenUri); WebRequest=WebRequest.Create(requestUri); request.Method=“POST”


您正在使用旧的gdata协议。我建议您使用。
查看有关如何使用OAuth2的详细信息。

谢谢。我将在周末试用。您有OAuth2身份验证的dotnet示例吗?最好访问YOuTube库。
        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: