2016-11-26 9 views
2

コンテンツ本文でHTTP GETリクエストを送信する必要があります。はい、私はこれが怒られていることを知っていますが、それは技術的に法的な取引です。.NET HTTP GET with Body

現在、以下のように要求ストリームを取得しようとすると、.NET WebRequestクラスが失敗します。

string url = "https://someplace.com/api"; 
var wr = WebRequest.Create(url); 
wr.Method = "GET"; 

string json = JsonConvert.SerializeObject(query); 
byte[] byteData = Encoding.UTF8.GetBytes(json); 

using (var req = wr.GetRequestStream()) // Exception thrown here 
{ 
    req.Write(byteData, 0, byteData.Length); 
    req.Flush(); 
} 

その他のオプションはありますか?

同等CURLコマンドは次のとおりです。

curl -XGET 'localhost:9200/twitter/tweet/_search?pretty' -d' 
{ 
    "query" : { 
     "term" : { "user" : "kimchy" } 
    } 
}' 
+0

「この回答」(http://stackoverflow.com/a/983458/22099)を読んで、「法的な取引」でないことが分かります。一方、あなたが主張するならば、あなたは単に低レベルに行き、自分で接続を確立しバイトを送ることができます。 – miha

+0

@miha私は、身体を送ってはいけないと言われているところは見ません。意味がないはずですが、ElasticSearch APIは非常に長いURLにシリアライズされる複雑なクエリを定義するために使用します。 重要なのはそれだけでは意味がないとは言いません。 – fungus1487

+0

必須ではありませんが、[推奨](https://tools.ietf.org/html/rfc2616#section-4.3)では使用できません。これは、リクエストに複数のレイヤー(プロキシ、ロードバランサ)がある可能性があるためです。 GETリクエストは途中でキャッシュされ、ボディは無視されます。スタック全体を制御していない場合、バグが発生する可能性があります。 –

答えて

-1

あなたは(curlコマンドは、同じことを、あなたはシオマネキのようないくつかのツールでそれを検査することができます)HTTP GETを使用してのみクエリ文字列を送信することができます。あなたは以下のような文字列全体を渡す必要があります。

string json = JsonConvert.SerializeObject(query); 
string url = "https://someplace.com/api?pretty="+json; 
var wr = WebRequest.Create(url); 
wr.Method = "GET"; 

注:-XGET &カール-Gカール同じです。

+1

はい、私はこれが事実であると知っています、私は代替案を求めていました。 – fungus1487

+0

代替手段はありません。その理由は何ですか? –