2

c#を使用してGoogle APiのaccess_tokenを取得しようとしていますが、常にエラーメッセージinvalid_requestが表示されます。私のコードがあります:

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 {}

https://developers.google.com/accounts/docs/OAuth2WebServer#offlineを使用しています

4

1 に答える 1

3

HttpUtility.UrlEncodeリクエストデータの各アイテムの呼び出しを削除してみてください。データはPOSTされているURLに入らないため、これを行う必要はありません。これは間違いなく送信されている情報を薄め、あなたのInvalid Request応答につながります。

于 2012-08-08T12:02:42.153 に答える