使用GET方法的C#HTTP Body

时间:2012-08-17 21:08:13

标签: c# .net http

我正在使用一个API,要求我将方法设置为GET并包含一个消息体。但是,当我尝试这样做时,我收到以下错误:“无法使用此动词类型发送内容正文”。我读到HttpWebRequest类不支持这个并且是异常的原因。有工作吗?

这是我当前的代码:data是一个编码为字节数组的json字符串

HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
request.ContentType = "application/json";
request.ContentLength = data.Length;
using (Stream requestStream = request.GetRequestStream()) {
    requestStream.Write(data.ToArray(), 0, (int)data.Length);
}

这是我试图模仿的PHP代码

<?php
$data = array("id" => "1234");
$data_string = json_encode($data);
$ch = curl_init('url');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($data_string))
);
$result = curl_exec($ch);
var_dump($result);
?>

谢谢,

3 个答案:

答案 0 :(得分:2)

什么叫做主动反对REST的API? “加速”的? “不安”?

运气好一点,他们的服务只是不关心动词是什么,PHP代码只是发生了使用GET并且遇到了服务器没有阻止它的错误,这是一个非常小的bug,只要它行为正确,POST也没关系。

如果不这样做,最好的办法是看看他们是否有另一种方法(如果它是一个自然符合GET的读取请求)接受URI中的参数,可能根据RFC 2616使用了合适的标头,否则就可以了通过POST,GET等接受一些东西。

如果这不起作用,则必须在TcpClient之上构建HTTP客户端。这将是非常可怕的。

答案 1 :(得分:1)

完全有可能,但您必须使用较新的HttpClient类:https://stackoverflow.com/a/47902348/70345

答案 2 :(得分:-3)

不建议使用GET请求发送内容。有关详细信息,请参阅此帖子:HTTP GET with request body

this is what Roy Fielding has to say about the topic