我正在嘗試向"Content-Type": "multipart/form-data"Laravel 應用程式發送 HTTP PUT 請求。當我將方法更改為 POST 時,它可以作業。
$a = $request->all(); // With PUT this is empty but with POST it works fine.
客戶端執行以下代碼:
axios({
method: "post", // when I try method:"PUT" and change the content type
url: "/api/offer",
data: fd,
headers: {"Content-Type": "multipart/form-data"} // here change to "x-www-form-urlencoded" it the $a array on backend is empty!
}).then(response => {
console.log("/offer/" response.data)
if (response.data)
window.location.replace("/offer/" this.offer.id);
else {
console.log("show a message that something went wrong! ")
}
}).catch(function (error) {
})
我在檔案中找不到PUT 無法發送“multipart/form-data”的任何地方
那么,PUT 可以發送“multipart/form-data”還是只有 POST 可以做到這一點,或者它只是一個 PHP/Laravel 問題?
編輯: 另外,除了正確遵守 HTTP 協議和 CRUD 操作之外,使用 PUT 而不是 POST 有什么區別?
uj5u.com熱心網友回復:
Laravel(HTML 表單)不適用于 Put 請求,因此您需要將 POST 請求偽裝成 PUT 或 PATCH 請求。在 Axios 上,您使用 .post 動詞,但在表單資料中附加
_method: "put"
來自官方檔案的資訊:https : //laravel.com/docs/8.x/routing#form-method-spoofing
檔案摘錄:
HTML表單不支持
PUT,PATCH或DELETE動作。所以,當定義PUT,PATCH或DELETE路由被從HTML表單呼叫,您將需要一個隱藏的加_method場的形式。與_method欄位一起發送的值將用作 HTTP 請求方法
uj5u.com熱心網友回復:
幾周前我自己在一個 Symfony 5.3 專案中遇到了這個問題。它僅適用于 POST 請求,不適用于 PUT。這是來自 Symfony GitHub 的一個問題,它更詳細地解釋了它。
據我了解,問題在于這些請求的 PHP 實作。HTTP 標準“PUT”支持它,但 PHP 不支持。這里還有一個來自PHP bugtracker的錯誤鏈接。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/376631.html
