我使用以下代码来获取谷歌OAuth2的访问令牌。在某些时候它一直工作正常,但是我已经做了一些事情/发生了一些事情,但我无法弄清楚是什么,现在我得到了:
远程服务器返回错误:(400) 错误请求。
当我尝试使用邮递员中的参数发布帖子时,我得到
{ "错误": "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 编码的情况下工作,在查看了一些有类似问题的帖子后,我将其添加到测试中,但似乎找不到使其工作的答案。
您需要
将 http POST 请求标头的Content-Type
设置为 application/x-www-form-urlencoded