Laravel 5.4:POST API路由提供MethodNotAllowedHttpException

时间:2017-10-31 22:06:49

标签: php laravel api

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也不是答案:(

有人有同样的问题吗?任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:2)

噢,是的!正如@patricus在评论中提到的那样,我在不知情的情况下试验了一个愚蠢的重定向!让我清楚这一点,对于那些经历过同样事情并且不知道这个问题来自哪里的人来说!

您需要确保您要连接的网址不会在幕后重定向...

e.g。在我自己的主机面板中,我已经设置在我的所有网址中添加WWW ...所以当我尝试通过POST方法访问https://example.com/app/public/api/test网址时,我收到了MethodNotAllowedHttpException错误!因为我的网址重定向到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面板中再次设置此设置后,将所有网址从http://重定向到https://你不记得了!