71

これは、.NET でサービスを呼び出す方法です。

var requestedURL = "https://accounts.google.com/o/oauth2/token?code=" + code + "&client_id=" + client_id + "&client_secret=" + client_secret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code";
HttpWebRequest authRequest = (HttpWebRequest)WebRequest.Create(requestedURL);
authRequest.ContentType = "application/x-www-form-urlencoded";
authRequest.Method = "POST";
WebResponse authResponseTwitter = authRequest.GetResponse();

しかし、このメソッドが呼び出されると、次のようになります。

例外の詳細: System.Net.WebException: リモート サーバーがエラーを返しました: (411) 長さが必要です。

私は何をすべきか?

4

9 に答える 9

85

HttpWebRequest および POST メソッドを使用している場合は、RequestStream を介してコンテンツ (または必要に応じて本文) を設定する必要があります。ただし、コードによると、 authRequest.Method = "GET" を使用するだけで十分です。

POST 形式について疑問がある場合は、次のことを行う必要があります。

ASCIIEncoding encoder = new ASCIIEncoding();
byte[] data = encoder.GetBytes(serializedObject); // a json object, or xml, whatever...

HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = data.Length;
request.Expect = "application/json";

request.GetRequestStream().Write(data, 0, data.Length);

HttpWebResponse response = request.GetResponse() as HttpWebResponse;
于 2013-08-21T08:25:42.640 に答える
16

HttpWebRequestを作成するときPOSTは、送信するデータの長さを次のように指定する必要があります。

string data = "something you need to send"
byte[] postBytes = Encoding.ASCII.GetBytes(data);
request.ContentLength = postBytes.Length;

データを送信しない場合は、0 に設定してください。つまり、コードに次の行を追加するだけです。

request.ContentLength = 0;

通常、データを送信しない場合は、 HTTP RFCGETでわかるように、代わりにメソッドを選択する方が賢明です。

于 2013-08-21T08:25:40.417 に答える
3
var requestedURL = "https://accounts.google.com/o/oauth2/token?code=" + code + "&client_id=" + client_id + "&client_secret=" + client_secret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code";
HttpWebRequest authRequest = (HttpWebRequest)WebRequest.Create(requestedURL);
authRequest.ContentType = "application/x-www-form-urlencoded";
authRequest.Method = "POST";
//Set content length to 0
authRequest.ContentLength = 0;
WebResponse authResponseTwitter = authRequest.GetResponse();

ContentLengthプロパティにはContent-length、リクエストとともに HTTP ヘッダーとして送信する値が含まれます。

プロパティの-1以外の値はContentLength、リクエストがデータをアップロードし、データをアップロードするメソッドのみを Method プロパティに設定できることを示します。

プロパティが値に設定された後、そのバイト数が、 メソッドまたは メソッドとメソッドの両方ContentLengthを呼び出すことによって返される要求ストリームに書き込まれる必要があります。GetRequestStreamBeginGetRequestStreamEndGetRequestStream

詳細については、ここをクリックしてください

于 2015-08-21T09:49:04.893 に答える