使用 PUT 请求发送多部分/表单数据在 Laravel 中不起作用



我正在尝试向Laravel应用程序发送带有"Content-Type": "multipart/form-data"的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无法发送的文档中找不到任何地方";多部分/形式数据";

所以,可以PUT发送";多部分/形式数据";或者通常只有POST才能做到这一点,或者这只是一个PHP/Laravel问题?

编辑:此外,除了正确遵守HTTP协议和CRUD操作之外,使用PUT而不是POST有什么区别?

Laravel(HTML表单(不能很好地处理Put请求,因此您需要将POST请求当作Put或PATCH请求来伪造。在Axios上,您使用.post动词,但在表单数据中添加

_method: "put"

官方文件中的信息:https://laravel.com/docs/8.x/routing#form-欺骗的方法


文档摘录:

HTML表单不支持PUTPATCHDELETE操作。因此,当定义从HTML表单调用的PUTPATCHDELETE路由时,您需要在表单中添加一个隐藏的_method字段。与_method字段一起发送的值将用作HTTP请求方法

几周前,我在一个Symfony 5.3项目中遇到了这个问题。它只适用于POST请求,而不适用于PUT。下面是Symfony GitHub的一个问题,它对它进行了更详细的解释。

据我所知,这些问题存在于这些请求的PHP实现中。HTTP标准";PUT";支持它,但PHP不支持。这里还有一个链接,指向PHP错误跟踪器中的错误。

最新更新