C# Google Api获取令牌请求返回无效的\u请求

C# Google Api获取令牌请求返回无效的\u请求,c#,oauth-2.0,google-authentication,C#,Oauth 2.0,Google Authentication,我试图使用c获取Google APi的access#u令牌,并且总是收到错误消息invalid#u请求。这是我的代码: var Params = new Dictionary<string, string>(); Params["client_id"] = GoogleApplicationAPI.CLIENT_ID; Params["client_secret"] = GoogleApplicationAPI.CLIENT_SECRET; Params["code"] = "4/0

我试图使用c获取Google APi的access#u令牌,并且总是收到错误消息invalid#u请求。这是我的代码:

var Params = new Dictionary<string, string>();
Params["client_id"] = GoogleApplicationAPI.CLIENT_ID;
Params["client_secret"] = GoogleApplicationAPI.CLIENT_SECRET;
Params["code"] = "4/08Z_Us0a_blkMlXihlixR1579TYu.smV5ucbI8U4VOl05ti8ZT3ZD4CgMcgI";
Params["redirect_uri"] = GoogleApplicationAPI.RETURN_URL;
Params["grant_type"] = "authorization_code";

var RequestData = "";
foreach (var Item in Params)
{
    RequestData += Item.Key + "=" + HttpUtility.UrlEncode(Item.Value) + "&";
}

string Url = "https://accounts.google.com/o/oauth2/token";

var request = (HttpWebRequest) WebRequest.Create(Url);
request.Method = HttpMethod.Post.ToString();
request.ContentType = "application/x-www-form-urlencoded";

var SendData = Encoding.UTF8.GetBytes(RequestData);
try
{
    request.ContentLength = SendData.Length;
    Stream OutputStream = request.GetRequestStream();
    OutputStream.Write(SendData, 0, SendData.Length);
} catch {}

try
{
    using (var response = (HttpWebResponse) request.GetResponse())
    {
        var stream = response.GetResponseStream();
        var sr = new StreamReader(stream);
        string JSON = sr.ReadToEnd();
    }
} catch {}
var Params=newdictionary();
Params[“client_id”]=GoogleApplicationAPI.client_id;
Params[“client_secret”]=GoogleApplicationAPI.client_secret;
参数[“代码”]=“4/08Z_Us0a_blkMlXihlixR1579TYu.smV5ucbI8U4VOl05ti8ZT3ZD4CgMcgI”;
Params[“redirect_uri”]=GoogleApplicationAPI.RETURN_URL;
参数[“授权类型”]=“授权代码”;
var RequestData=“”;
foreach(参数中的变量项)
{
RequestData+=Item.Key+“=”+HttpUtility.UrlEncode(Item.Value)+“&”;
}
字符串Url=”https://accounts.google.com/o/oauth2/token";
var request=(HttpWebRequest)WebRequest.Create(Url);
request.Method=HttpMethod.Post.ToString();
request.ContentType=“application/x-www-form-urlencoded”;
var SendData=Encoding.UTF8.GetBytes(RequestData);
尝试
{
request.ContentLength=SendData.Length;
Stream OutputStream=request.GetRequestStream();
OutputStream.Write(SendData,0,SendData.Length);
}捕获{}
尝试
{
使用(var response=(HttpWebResponse)request.GetResponse())
{
var stream=response.GetResponseStream();
var sr=新的流阅读器(流);
字符串JSON=sr.ReadToEnd();
}
}捕获{}

我使用尝试删除对请求数据中每个项目的
HttpUtility.UrlEncode
调用。您不需要这样做,因为数据不会进入正在发布的url。这无疑会稀释正在发送的信息,从而导致您的
无效请求
响应。

您似乎在硬编码
code
参数,这是否会在一定时间后过期?事实上,我得到的代码是这样的
var code=Request.Params[“code”]
@AlexeyLisikhin这不是您的示例所显示的,是否有随错误返回的其他信息?通常,响应会有一些信息告诉您为什么得到无效响应。@AlexeyLisikhin嗯,我唯一能想到的是数据的编码是错误的。但是,您说过删除
UrlEncode
不会改变任何事情。您最好使用类似的方法检查发送的请求,以确保它看起来正常。@MartinBories是的,我解决了这个问题。只是不要使用UrlEncode,并确保您响应的参数是正确的。