我在本地计算机上创建了一个网站,将其传输到服务器后,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-Type
和Accept
application/json
请求标头php artisan route:list
它不是资源丰富的路由,它的规则POST api/shop/search ..................... Api\Shop\SearchController
4条答案
按热度按时间k4aesqcs1#
得到这个错误是正常的,当你发出一个像这样的
https://server.example/api/shop/search
调用时,你正在发送一个GET
请求,并且你在你的API路由中定义了这个路由和POST
请求。再次定义相同的路由,但使用
GET
方法,使用不同的方法定义相同的路由是正常的,并且每个方法由控制器中的不同函数处理。b5lpy0ml2#
在Postman中,你使用的是POST方法还是GET方法?如果使用GET,这可能是错误,因为路由需要POST方法。尝试更改Postman中的方法,如图所示。
Postman screen
flmtquvp3#
如果您使用此路由:
Route::post('/shop/search', SearchController::class);
当你调用https://server.example/api/shop/search
时你正在使用资源路由。你可以在你的控制台php artisan route:list
和这个命令,你可以显示你所有的路线,你可以显示你的路线后,通常,路线POST
它的存储,更新,删除in laravel
。另外,如果你使用路由POST
,你应该在请求中发送csrf_token
。如果你是用表格发送请愿书,你可以在所有输入之前添加表格@csrf
。raogr8fs4#
问题在于
nginx
服务器的配置不正确。我不会在配置文件中指出错误的位置,这没有意义,但是如果你从official documentation中获取并使用nginx
配置文件,那么当你发送POST
请求时,你就不会有这样的错误,Laravel认为它是GET
。