带有 GET 方法的 C# HTTP 正文

标签 c# .net http

我使用的 API 要求我将方法设置为 GET 并包含消息正文。但是,当我尝试这样做时,出现以下错误:“无法发送具有此动词类型的内容正文”。我读到 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);
?>

谢谢,

最佳答案

主动违背 REST 的 API 是什么? “快”? “不安”?

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

如果做不到这一点,您最好的选择是看看他们是否有替代方法(如果它是一个自然适合 GET 的阅读请求)接受 URI 中的参数,并且可能根据 RFC 2616 使用适当的 header ,或者可以通过 POST、GET 等接受一些东西。

如果这不起作用,您将不得不在 TcpClient 之上构建一个 HTTP 客户端。这将是非常可怕的。

关于带有 GET 方法的 C# HTTP 正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12013204/

相关文章:

c# - 使用MVC ApiController接收通过WebClient.UploadFile上传的文件

c# - 瓷砖在Windows商店应用程序中的存储位置

.net - ADO .NET - 将 DataTable 添加到多个 DataSet

http - 我应该使用什么HTTP错误代码来未经授权访问 protected 图像?

c# - Jon Skeet 单例和 EventAggregator

c# - 用年份格式化 TimeSpan

.net - 如何配置 NHibernate 以使用 MS SQL 2016 (RTM)?

调用存储过程时.NET READPAST 锁定错误

ios - 通过 NSURLSession 发送表情符号时崩溃

c++ - 发送 http 请求,保持 session 事件 : C/C++ with cURL(axus camera)