使用 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