使用 IIS、AngularJS 和 Laravel 删除 MethodNotAllowedHttpException

Posted

技术标签:

【中文标题】使用 IIS、AngularJS 和 Laravel 删除 MethodNotAllowedHttpException【英文标题】:DELETE MethodNotAllowedHttpException with IIS, AngularJS and Laravel 【发布时间】: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) 【参考方案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 天时间搜索网络服务器文档的情况下查看正确的位置!

【讨论】:

以上是关于使用 IIS、AngularJS 和 Laravel 删除 MethodNotAllowedHttpException的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS文件上传抛出403 Forbidden - IIS Windows Server

在iis上部署 AngularJS

IIS / AngularJS单页应用程序-在应用程序中导航时如何防止单个index.html的页面缓存

larave学习笔记1-安装配置

Larave中CSRF攻击

larave -- leftJoin IFNULL 链表查询