【问题标题】:DELETE MethodNotAllowedHttpException with IIS, AngularJS and Laravel使用 IIS、AngularJS 和 Laravel 删除 MethodNotAllowedHttpException
【发布时间】:2017-02-17 20:12:15
【问题描述】:

我正在学习托管在 IIS/Windows 10 上的 AngularJS 1.5.8 + Laravel 5.3.17 + PHP 7,遵循 tutorial。

在向 Laravel 发送 HTTP AngularJS $resource.delete() 时,我收到一个错误:405 Method Not Allowed 和以下 Laravel 错误消息:

php artisan route:list 给了我以下路线表。我希望 DELETE 路由到 time.destroy。

在 IIS 上,我尝试将 PHP 设置为处理程序以接受所有 HTTP 动词无济于事。

IIS 请求过滤以明确允许 DELETE 也不起作用。

HTTP GET 和 PUT 动词可以正常工作。如何启用 DELETE 动词?

提前致谢!

【问题讨论】:

  • 您是否有一个中间件正在更改请求的 HTTP 动词?
  • 我刚学,上面的教程没有用到中间件。所以我相信这只是 Laravel 中的默认设置,如果有的话。
  • 好的,您可以尝试将中间件添加到您的routes.php 以检查它是否被任何机会覆盖? Route::group(['middleware' => 'web', 'prefix' => 'api'], function() {...
  • 我使用 laravel 和 anjular.js,当我删除资源时,$http.delete("url") 效果很好。
  • 我之前在 Apache 服务器上遇到过这个问题。基本上,浏览器每次在实际请求之前都会在“OPTIONS”标志下向服务器发送一个预检请求,因此请确保 IIS 服务器也接受该请求(默认情况下它接受 GET 和 POST)

标签: php angularjs laravel-5 iis-express http-status-code-405


【解决方案1】:

我发现原因是我不小心将 id:null 值传递给了 Laravel。

var Time = $resource('api/time/:id'); //using angular-resource.js
Time.delete({id:null}).$promise.then(function(success) {
    console.log(success);
}, function (error) {
    console.log(error); // HTTP error 405, Method Not Allowed
});

405 错误信息返回确实具有误导性。我想知道如何覆盖此行为并返回更有意义的错误消息。

希望这可以帮助其他可怜的人在不浪费 2 天时间搜索网络服务器文档的情况下查看正确的位置!

【讨论】:

    猜你喜欢
    • 2014-11-06
    • 2018-05-28
    • 2015-10-29
    • 2018-09-15
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2019-04-15
    • 2013-07-04
    相关资源
    最近更新 更多