2

このコードを実行してGoogleAPIを呼び出すと、「不正なリクエスト」エラーだけが表示されますが、どこが間違っているのかわかりません。

コードはGoogleの認証ページから問題なく返されます。コードが下の部分に到達すると、失敗します。誰かが私がここでどこが間違っているのか教えてもらえますか?

このためのライブラリがあることは承知していますが、学習演習としてこれをRESTfulな方法で行う方法を理解しようとしています。

ありがとう

   var code = Request.QueryString["code"];

    var accessToken = string.Empty;
    var req0 = WebRequest.Create("https://accounts.google.com/o/oauth2/token");
    req0.Method = "POST";
string postData = string.Format("code={0}&client_id={1}&client_secret={2}&redirect_uri=        {3}&grant_type=authorization_code",
code, //the code i got back
"xxxx.apps.googleusercontent.com",
"xxx",
Url.Encode("http://localhost/home/callback")
); //my return URI

byte[] byteArray = Encoding.UTF8.GetBytes(postData);
req0.ContentType = "application/x-www-form-urlencoded";
req0.ContentLength = byteArray.Length;
using (Stream dataStream = req0.GetRequestStream())
{
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
        }
        try
        {
            using (WebResponse response = req0.GetResponse())
            {
                using (var dataStream = response.GetResponseStream())
                {
                    using (StreamReader reader = new StreamReader(dataStream))
                    {
                        string responseFromServer = reader.ReadToEnd();
                        var ser = new JavaScriptSerializer();
                        accessToken = ser.DeserializeObject(responseFromServer).ToString();
                    }
                }
            }
        }
        catch (WebException wex) 
        { 
            Debug.WriteLine(wex.ToString());
        }
        catch (Exception ex) 
        {
            Debug.WriteLine(ex.ToString());

        }
4

1 に答える 1

0

Google APIは、クライアントIDの戻りURIに対してAPIコンソールに入力した内容と、それを呼び出すためにコードに入力した内容に関しては非常に扱いにくいものです。

末尾のスラッシュがありませんでした。それがすべてでした。教訓...

JonとSandeepの助けに感謝し、ネットワークトラフィックに何が含まれていたか、何を送信すべきかを比較することで、正しい方向を示してくれました。

于 2012-06-14T17:05:13.633 に答える