2016-11-26 8 views
2

Мне нужно отправить запрос HTTP GET с телом контента. Да, я знаю, что это неодобрительно, но это технически законная сделка..NET HTTP GET с телом

В настоящее время класс .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 -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

вы можете отправить только строки запроса с использованием 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

альтернативы нет, и почему вы деградировали ответ? –

 Смежные вопросы

  • Нет связанных вопросов^_^