[英]C# HTTP Body with GET method
我正在使用一個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);
?>
謝謝,
人們稱之為主動反對REST的API是什么? “加速”的? “憂慮”?
有點運氣,他們的服務只是不關心動詞是什么,PHP代碼只是發生使用GET並遇到服務器沒有阻止它的錯誤,這是一個非常小的bug,只要它行為正確,POST也沒關系。
如果做不到這一點,最好的辦法是看看他們是否有另一種方法(如果它是一個自然符合GET的讀取請求)接受URI中的參數,可能根據RFC 2616使用了合適的標題,或者可以接受通過POST,GET等
如果這不起作用,則必須在TcpClient之上構建HTTP客戶端。 這將是非常可怕的。
這完全有可能,但你必須使用更新的HttpClient類: https : //stackoverflow.com/a/47902348/70345
建議不要使用GET請求發送內容。 有關更多詳細信息,請參閱此帖子: 帶請求正文的HTTP GET
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.