3

以下のコードをC#言語で使用してアクセストークンを取得しようとしていますが、400の不正なリクエストの例外が発生しています。

コード:

WebRequest httpWReq = WebRequest.Create("https://www.box.com/api/oauth2/token");


string postData = "grant_type=authorization_code"; 
postData += "&code=" + Code; 
postData += "&client_id=MY_CLIENT_ID"; 
postData += "&client_secret=MY_CLIENT_SECRET"; 
postData += "&redirect_uri=https://www.google.com";

byte[] data = Encoding.UTF8.GetBytes(postData); 
httpWReq.Method = "POST"; 
httpWReq.ContentType = "application/x-www-form-urlencoding"; 
httpWReq.ContentLength = data.Length; 

using (Stream stream = httpWReq.GetRequestStream()) 
{ 
    stream.Write(data, 0, data.Length); 
}

var response = httpWReq.GetResponse();
var responseStream = response.GetResponseStream();
using (var reader = new StreamReader(responseStream))
{
    var responseReader = reader.ReadToEnd();
    MessageBox.Show(responseReader);
}

しかし、私は常に次のエラーを受け取ります:

{"error":"invalid_request","error_description":"Invalid grant_type parameter or parameter missing"}

この問題を克服する方法は?

どんな助けでもありがたいです。前もって感謝します。

ありがとう、ハリッシュ・レディ

4

2 に答える 2

1

考えられる問題が2つありますが、どちらもこの行にあります。

postData += "&redirect_uri=https://www.google.com";
  1. リダイレクトURIをurlencodeする必要があると思います。
  2. あなたはgoogle.comドメインを所有していないと思いますので、それは無効な値です。:)リクエストを行っているドメインを指す必要があります。または、Boxアプリの構成ページでこのリダイレクトURIを事前設定することをお勧めします。

ちなみに、 GitHubとNuGetで公開されているBox API v2 SDK for .Net(および対応するMVCベースのOAuthの例)を確認することをお勧めします。(完全開示:私は両方に貢献します。)

于 2013-03-21T13:44:14.530 に答える
0
HttpWebRequest httpWReq =
                (HttpWebRequest)WebRequest.Create("https://api.box.com/oauth2/token");

            ASCIIEncoding encoding = new ASCIIEncoding();
            string postData = "grant_type=authorization_code";
            postData += "&code=" + authorizationCode;
            postData += "&client_id=" + ClientId;
            postData += "&client_secret=" + ClientSecretId;
            byte[] data = encoding.GetBytes(postData);

            httpWReq.Method = "POST";
            httpWReq.ContentType = "application/x-www-form-urlencoded";
            //httpWReq.ContentType = "application/x-www-form-urlencoded";
            httpWReq.ContentLength = data.Length;

            using (Stream stream = httpWReq.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }
于 2017-09-05T06:54:51.190 に答える