很奇怪,POST API 路由不起作用!
在 api.php
中检查这个简单的 POST 路由:
// This route doesn't work!
Route::post('/test', function (Request $request) {
return 'test';
});
它给我这个错误:Symfony\\Component\\HttpKernel\\Exception\\MethodNotAllowedHttpException
!
但是如果我将请求动词更改为 GET,那么 GET 和 POST 都可以正常工作!!!这让我发疯!
// This route works on both, GET and POST!
Route::get('/test', function (Request $request) {
return 'test';
});
是的,如您所知,API 路由根本不使用 VerifyCsrfToken
中间件。所以中间件显然不是问题!而 php artisan cache:clear
也不是答案:(
有人遇到同样的问题吗?任何帮助将不胜感激。
最佳答案
哦耶!正如@patricus 在评论中也提到的那样,我在不知情的情况下试验了一个愚蠢的重定向!让我为遇到同样事情但不知道此问题出处的任何其他人澄清这一点!
您需要确保您要连接的 URL 不会在幕后被重定向...
例如在我自己的托管面板中,我已经设置为在我的所有 URL 中添加 WWW...所以当我尝试访问 https://example.com/app/public/api/test
通过 POST 方法访问 URL,我遇到了 MethodNotAllowedHttpException
错误!因为我的 URL 被重定向到 https://www.example.com/app/public/api/test
并且在重定向中它会变成 GET!因为我没有设置任何 GET 路由...所以很明显我遇到了 MethodNotAllowedHttpException
异常 :)
这很愚蠢,对吧?是,我知道!还要确保如果您的应用位于 SSL 域中,请始终连接到 https://
而不是 http://
。因为它不仅安全,而且重定向可能会在您不知情的情况下再次发生!如何?通过您自己的 .htaccess
文件,您已更改或您的托管支持已为您更改了它但您不记得了(同时检查 this answer):
# Let's force using SSL on all of our URLs and also forbid non-secure POSTs
RewriteEngine On
# Forbid non-secure POSTs
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_METHOD} =POST
RewriteRule ^ / [F,L]
# Force SSL
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
或通过 CloudFlare 等服务,如果您在 CloudFlare 面板中设置了此设置并再次将您的所有 URL 从 http://
重定向到 https://
不记得了!
关于php - 拉维尔 5.4 : POST API routes give MethodNotAllowedHttpException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47045215/