Laravel中使用Axios删除数据时出现DELETE 405错误
解决Axios调用Laravel DELETE接口返回405 Method Not Allowed错误
我尝试用Axios删除数据行时,持续收到DELETE 405 (Method Not Allowed)错误,相关代码如下:
后端代码
删除API路由
Route::delete('/vehicles/{id}', [VehiclesController::class, 'destroy']);
控制器代码
public function destroy($id) { $vehicleDelete = Vehicle::findOrFail($id); $vehicleDelete->delete(); return response()->json([ "status" => true ], 200); }
前端代码
删除按钮
<button class='btn btn-danger' onclick="deleteBtn(${item.id})">Delete</button>
Axios删除函数
const deleteBtn = (id) => { axios.delete("api/vehicles/" + id) .then(response => { console.log(id); }) }
已通过console.log确认能获取正确的ID,但仍报错。以下是可行的解决方案:
添加CSRF令牌:Laravel默认启用CSRF保护,DELETE请求必须携带CSRF令牌。
- 在页面头部添加meta标签:
<meta name="csrf-token" content="{{ csrf_token() }}">- 全局配置Axios携带令牌(推荐):
axios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]').content;或者在单个请求中携带:
const deleteBtn = (id) => { axios.delete(`api/vehicles/${id}`, { headers: { 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content } }) .then(response => { console.log(id); }) }检查路由优先级:确保DELETE路由没有被同路径的GET/POST路由覆盖。执行
php artisan route:list查看路由列表,确认/vehicles/{id}的DELETE路由是有效且优先级正确的。验证请求URL:在浏览器开发者工具的Network面板查看实际请求的URL,确认和路由定义的路径完全匹配,避免出现前缀缺失或路径错误。
服务器配置调整:若使用Apache服务器,需确保允许DELETE方法。在项目根目录的
.htaccess中添加:
<Limit GET POST PUT DELETE> Allow from all </Limit>
同时确认mod_rewrite模块已开启,保证Laravel路由规则正常解析。
内容的提问来源于stack exchange,提问作者Raitiko
相关产品推荐
相关产品推荐

