我正在尝试使用OAuth2为谷歌分析API应用程序设置离线访问,我使用ASP。. NET POST我的授权码以换取一个刷新令牌,但我无法从服务器得到一个响应来给我刷新令牌。
我使用了MSDN文档中的示例代码作为post请求,所以我只能假设这是正确的,但是我收到错误消息"远程服务器返回了一个错误:(400)System.Net.HttpWebRequest.GetResponse()":
using System;
using System.IO;
using System.Net;
using System.Text;
WebRequest request = WebRequest.Create ("https://accounts.google.com/o/oauth2/token?code=xxxmyauthorizationcodexxx&client_id=xxxxxxxxx.apps.googleusercontent.com&client_secret=xxxxxxxxxxxx&redirect_uri=https://mysite.com/oauth2callback&grant_type=authorization_code");
request.Method = "POST";
string postData = "code=xxxmyauthorizationcodexxx&client_id=xxxxxxxxx.apps.googleusercontent.com&client_secret=xxxxxxxxxxxx&redirect_uri=https://mysite.com/oauth2callback&grant_type=authorization_code";
byte[] byteArray = Encoding.UTF8.GetBytes (postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream ();
dataStream.Write (byteArray, 0, byteArray.Length);
dataStream.Close ();
WebResponse response = request.GetResponse ();
dataStream = response.GetResponseStream ();
StreamReader reader = new StreamReader (dataStream);
string responseFromServer = reader.ReadToEnd ();
reader.Close ();
dataStream.Close ();
response.Close ();
我已经成功地使用GET方法来检索要开始的授权代码,并且我遵循以下文档:https://developers.google.com/accounts/docs/OAuth2WebServer#handlingtheresponse
我也使用https网站提出请求,我手动刷新我的授权码,因为它到期。有人有解决这个问题的办法吗?
编辑:对于任何遇到同样问题的人,首先看看aeijdenberg的回应下面,但我的解决方案是,我用于代码参数的授权代码到期相当即时-我不断刷新我的页面没有请求一个新的。要获取数据,只需显示responseFromServer变量中的内容。
看起来您传递了两次参数。在查询字符串中:
WebRequest request = WebRequest.Create ("https://accounts.google.com/o/oauth2/token?code=xxxx...
然后再作为POST数据。我建议删除查询字符串,例如直接POST到"https://accounts.google.com/o/oauth2/token"。
还建议确保所有参数都是URL编码的,如果你还没有这样做:http://msdn.microsoft.com/en-us/library/system.web.httputility.urlencode.aspx