Google OAuth2获取访问令牌Missing grant_type

时间:2016-03-21 09:41:25

标签: c# youtube-api youtube-data-api google-oauth2

我使用以下代码获取google OAuth2的访问令牌。 在某些时候它已经工作正常,但我做了一些事情/事情发生了,我无法解决什么,现在我得到了:

  

远程服务器返回错误:(400)错误请求。

当我在邮递员中尝试使用params的帖子时,我得到了

  

{     “error”:“invalid_request”,     “error_description”:“缺少必需参数:grant_type”   }

 using (WebClient client = new WebClient())
        {

            byte[] response =
                client.UploadValues("https://accounts.google.com/o/oauth2/token","POST", new NameValueCollection()
                    {
                        {"code",HttpContext.Current.Server.UrlEncode(authCode.ToString())},
                        {"redirect_uri", Uri.EscapeDataString("http://YouTubeTest.org/testpage.aspx")},
                        {"client_id", HttpContext.Current.Server.UrlEncode(clientId)},
                        {"client_secret", HttpContext.Current.Server.UrlEncode(clientSecret)},
                        {"grant_type", "authorization_code"}
                    });

            string result = Encoding.UTF8.GetString(response);
            XElement node = XElement.Parse(JsonConvert.DeserializeXNode(result, "Root").ToString());
            string refreshToken = node.Element("refresh_token").Value;
            string accessToken = node.Element("access_token").Value;

        //more work to do something with tokens
        }

这是以前没有使用URL编码的工作,我在查看了几个有类似问题的帖子之后添加了这个以进行测试,但似乎无法找到能够使其工作的答案。

1 个答案:

答案 0 :(得分:0)

您需要将http POST请求标头的Content-Type设置为application/x-www-form-urlencoded