Laravel 9中Axios POST请求报405 Method Not Allowed问题求助
解决Laravel 9中Axios POST请求405 Method Not Allowed问题
针对你遇到的新增文章POST请求返回405、但修改请求正常的情况,从代码和操作记录出发,排查方向及解决办法如下:
1. 修正控制器方法名的拼写错误
你的控制器方法定义为regitrarArticulo(缺失字母s),虽然路由已对应该方法名,但非常规拼写易引发缓存清理不彻底或后续维护问题,建议修正为标准拼写:
控制器代码修正:
public function registrarArticulo(Request $request){ // 修正方法名拼写 // 原有业务逻辑... }
路由配置同步修正:
Route::post('/registrar-articulo', [PostController::class, 'registrarArticulo'])->middleware('auth')->name('registrar-articulo');
修改后重新清理路由缓存:
php artisan route:clear
2. 移除Axios中手动设置的Content-Type
当使用FormData发送请求时,Axios会自动生成包含边界字符串的multipart/form-data请求头,手动设置反而会丢失边界信息,导致Laravel无法正确解析请求体,进而触发路由匹配失败返回405。
JS代码修正:
axios.post(baseUrl+"/registrar-articulo", formData, { headers: { 'X-CSRF-TOKEN': window.CSRF_TOKEN // 移除手动设置的Content-Type配置 } })
3. 检查baseUrl的路径拼接问题
确认baseUrl变量末尾是否带有斜杠/,如果baseUrl为http://your-domain.com/格式,拼接后会生成http://your-domain.com//registrar-articulo这类无效路径,无法匹配正确路由。
可通过两种方式避免:
- 确保
baseUrl末尾不带斜杠,例如http://your-domain.com - 用模板字符串处理斜杠问题:
axios.post(`${baseUrl.replace(/\/$/, '')}/registrar-articulo`, formData, { ... })
4. 验证路由是否正确注册
执行以下命令查看当前路由列表,确认/registrar-articulo的POST路由存在且对应正确的控制器方法:
php artisan route:list
若路由未出现,检查web.php是否被正确加载,或是否有全局前缀、分组路由等规则覆盖了该路由。
额外排查点
- 检查CSRF令牌有效性:确认
window.CSRF_TOKEN是否通过meta标签等方式正确获取,避免因令牌无效触发拦截。 - 查看Laravel日志:打开
storage/logs/laravel.log,日志会记录405错误的具体原因(如路由匹配失败细节),帮助快速定位问题。
内容的提问来源于stack exchange,提问作者Ometeotl Lopez
相关产品推荐
相关产品推荐

