Мне нужно отправить запрос 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" }
}
}'
Возможно, вы захотите прочитать [этот ответ] (http://stackoverflow.com/a/983458/22099), где показано, что это не «юридическая сделка». С другой стороны, если вы настаиваете, вы можете просто пойти на низкий уровень и установить соединение самостоятельно и отправить байты. – miha
@miha Я не вижу, где он говорит, что требуется * не * отправить тело. Я согласен с тем, что это должно быть бессмысленным, однако ElasticSearch API использует его для определения сложных запросов, которые будут сериализованы в очень длинные URL. Суть в том, что он не говорит, что это не может быть просто бессмысленным. – fungus1487
Это не требуется, но это не [рекомендуется] (https://tools.ietf.org/html/rfc2616#section-4.3). Причина этого заключается в том, что ваш запрос может иметь несколько уровней (прокси, балансировщик нагрузки) между ними. Запрос GET может быть кэширован по пути, и тело будет проигнорировано. Вы можете получить ошибки в производстве, если не контролируете весь стек. –