用GET方法C#HTTP正文(C# HTTP Body with GET method)

2019-07-31 01:30发布

我使用的,需要我设置为GET和包括消息体的方法的API。 然而,当我尝试这样做,我得到了以下错误:“无法与这个动词型发送的内容体”。 我读了HttpWebRequest类不支持这一点,是异常的原因。 有没有解决办法?

这是我的当前代码:数据被编码为一个字节数组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);
?>

谢谢,

Answer 1:

这是什么一个称之为积极违背REST的API? “加速”的? “忧虑”?

随着一点点运气,他们只是服务不关心什么动词是和PHP代码只是发生在使用GET和命中服务器并没有阻止它一样长一个漂亮的小错误的bug,因为它正确的行为,并且这将是罚款与POST。

如果做不到这一点,最好的办法是看他们是否有另一种方法,要么(如果它是自然的匹配得到读取请求)接受的URI参数与可能适当的报头被用作按照RFC 2616,或者可以通过接受的东西POST,GET等。

如果不工作,你必须要在TcpClient的顶部构建一个HTTP客户端。 这将是非常可怕的。



Answer 2:

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



Answer 3:

不建议用GET请求发送内容。 看到这个帖子的更多细节: HTTP GET请求与身

而这正是罗伊菲尔丁不得不说的话题 。



文章来源: C# HTTP Body with GET method
标签: c# .net http