【问题标题】:Laravel 5.4: POST API routes give MethodNotAllowedHttpExceptionLaravel 5.4:POST API 路由给出 MethodNotAllowedHttpException
【发布时间】:2018-04-13 04:50:04
【问题描述】:

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

有人遇到过同样的问题吗?任何帮助将不胜感激。

【问题讨论】:

  • 听起来很疯狂,但是如果它存在,请尝试从您的请求中删除尾部斜杠,所以不要使用http://foo.dev/test/ 尝试http://foo.dev/test
  • 是的,太疯狂了..我也搜索过,其他人也有这个问题!但是到目前为止没有人能想出一个解决方案......而且也没有斜线。
  • 你的 API 怎么样?邮递员、ajax 还是其他?
  • 我正在通过邮递员访问 API。
  • 听起来您正在重定向。如果您 POST 到一个 url,它返回一个 301/302 重定向,那么对重定向 url 的后续请求将是一个 GET 请求。这就是为什么您的 POST 路由不起作用,以及为什么 POST 到您的 GET 路由起作用的原因。您需要找出导致重定向的原因。您可以使用您的.htaccess 内容以及您点击的网址或邮递员屏幕截图来更新您的问题。

标签: php laravel api


【解决方案1】:

哦,是的!正如@patricus 在 cmets 中也提到的那样,我在不知情的情况下尝试了一个愚蠢的重定向!让我为遇到同样事情但不知道这个问题来自哪里的其他人澄清这一点!

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

例如在我自己的托管面板中,我已设置在所有 URL 中添加 WWW...所以当我尝试通过 POST 方法访问 https://example.com/app/public/api/test 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://

【讨论】:

  • 你拯救了我的一天谢谢。
  • 谢谢伙计。您的声明“您需要确保您连接的 URL 不会在幕后被重定向......”拯救了我的一天!我一直想知道为什么我的代码在我的本地开发服务器中有效,但在我的实时服务器中无效
猜你喜欢
  • 2017-06-29
  • 2017-12-21
  • 2018-02-28
  • 1970-01-01
  • 2019-05-07
  • 2018-11-25
  • 1970-01-01
  • 2017-09-20
  • 2019-07-30
相关资源
最近更新 更多