Laravel api.php -路由不支持GET方法

3lxsmp7m  于 2023-10-22  发布在  PHP
关注(0)|答案(4)|浏览(136)

我在本地计算机上创建了一个网站,将其传输到服务器后,https API请求停止工作
routes/api.php

Route::post('/shop/search', SearchController::class);

调用此URL:

https://server.example/api/shop/search

单元测试适用于post请求,但来自Postman或其他实用程序的请求显示错误{ "message": "The GET method is not supported for route api/shop/search. Supported methods: POST." }
如果我将api.php方法改为get方法-它可以工作。
尝试了我在这个主题上找到的各种解决方案,但仍然无法通过HTTPS处理发布请求。
Postman中,我不会混淆post和get request,这太明显了。此外,我使用3-4个不同的HTTP客户端
\App\Http\Middleware\VerifyCsrfToken.php中为所有路由'*'添加了禁用csrf token验证
nginx服务器上没有重定向,我用浏览器的请求检查了一下,它也可以发送post请求
每次从控制台php artisan optimize:clear清除该高速缓存
默认添加Content-TypeAcceptapplication/json请求标头
php artisan route:list它不是资源丰富的路由,它的规则
POST api/shop/search ..................... Api\Shop\SearchController

k4aesqcs

k4aesqcs1#

得到这个错误是正常的,当你发出一个像这样的https://server.example/api/shop/search调用时,你正在发送一个GET请求,并且你在你的API路由中定义了这个路由和POST请求。
再次定义相同的路由,但使用GET方法,使用不同的方法定义相同的路由是正常的,并且每个方法由控制器中的不同函数处理。

Route::post('/shop/search', [SearchController::class, 'show']);
Route::get('/shop/search', [SearchController::class, 'search']);
b5lpy0ml

b5lpy0ml2#

在Postman中,你使用的是POST方法还是GET方法?如果使用GET,这可能是错误,因为路由需要POST方法。尝试更改Postman中的方法,如图所示。
Postman screen

flmtquvp

flmtquvp3#

如果您使用此路由:Route::post('/shop/search', SearchController::class);当你调用https://server.example/api/shop/search时你正在使用资源路由。你可以在你的控制台php artisan route:list和这个命令,你可以显示你所有的路线,你可以显示你的路线后,通常,路线POST它的存储,更新,删除in laravel。另外,如果你使用路由POST,你应该在请求中发送csrf_token。如果你是用表格发送请愿书,你可以在所有输入之前添加表格@csrf

raogr8fs

raogr8fs4#

问题在于nginx服务器的配置不正确。我不会在配置文件中指出错误的位置,这没有意义,但是如果你从official documentation中获取并使用nginx配置文件,那么当你发送POST请求时,你就不会有这样的错误,Laravel认为它是GET

相关问题