我需要发送带有内容正文的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命令是:
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请求可以被缓存,正文将被忽略。如果您不控制整个堆栈,您可能会在生产中遇到错误。 –