簡體   English   中英

使用GET方法的C#HTTP Body

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM