【发布时间】:2022-02-09 19:46:08
【问题描述】:
在 Visual Studio 2013 下向本地 IIS Express 网站发出完美的动词时:
CROMULENT http://localhost:7579/Handler.ashx HTTP/1.1
Host: localhost:7579
服务器响应错误:
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE
这是对“通用处理程序”的请求(即.ashx)。如果我再试一次 static 资源:
SCHWIFTY http://localhost:7579/Default.htm HTTP/1.1
Host: localhost:7579
服务器响应错误:
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE
这完全是为了尝试使用 HTTP 动词:
DELETE http://localhost:7579/Handler.ashx HTTP/1.1
Host: localhost:7579
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE
PUThttp://localhost:7579/Handler.ashx HTTP/1.1
Host: localhost:7579
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE
这个问题已经被问死了,有时是我。但从来没有人提出解决方案。
问题>
微软的错误
从根本上说,问题在于 Microsoft 提供的 IIS 和 IISExpress 在默认情况下被破坏。它们不处理动词,而不是像 Web 服务器那样处理 HTTP 动词。
在管理 Windows Server 上运行的完整 IIS 时,最容易看到这一点。选择任何内置处理程序(例如 cshtml 处理程序),您会看到有人认为如果它仅与 GET、HEAD、POST 一起使用会很搞笑,和DEBUG动词:
而不是在 HTTP 服务器中正确实现对 HTTP 的支持。
问题变成了:
- 为什么确实不起作用
- 究竟如何修复它
- 如何在 IIS Express 中修复它(无需任何管理工具)
- 为什么它继续运送,年复一年,坏了
问题1.为什么不起作用?
第一个问题是为什么它不起作用。让我们看看一个 IIS 服务器,其中我们删除了除基本 Static 文件处理程序之外的所有处理程序:
处理程序配置为所有所有动词:
剩下的唯一处理程序设置为允许 any 动词。然而,如果我们向 Web 服务器发出请求,我们会得到错误:
DELETE http://scratch.avatopia.com/ HTTP/1.1
Host: scratch.avatopia.com
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE
Server: Microsoft-IIS/7.5
为什么会这样?
为什么没有成功?显示的配置选项在哪里:
GETHEADOPTIONSTRACE
因为服务器本身说这些是唯一支持的动词。
但是,如果我们将其更改为 GET,它就可以正常工作:
GET http://scratch.avatopia.com/ HTTP/1.1
User-Agent: Fiddler
Host: scratch.avatopia.com
HTTP/1.1 200 OK
Content-Type: text/html
问题2.如何解决?
普遍的看法是删除WebDAV。没有人知道 WebDAV 是什么,它怎么可能是一个问题,为什么它是一个问题,或者如果它只会导致问题,它为什么存在。 WebDAV 可以作为处理程序从 IIS 管理用户界面中删除:
这与从web.config 中的handlers 部分添加remove 条目相同(用户界面本身会为您将条目添加到web.config):
<system.webServer>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>
除非这不起作用。那么我们该如何修复呢?
从 IIS 开始,WebDAV 似乎更像是一种病毒。 you have to completely install or remove it as a module:
而不是简单地禁用它作为处理程序<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>
这听起来像是一个合理的想法,除了在我的测试用例中,在 IIS 7.5 上,WebDAV 都没有安装,并且作为一个模块被删除:
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Tue, 10 May 2016 19:19:42 GMT
Content-Length: 0
所以,如果我们能弄清楚如何解决这个问题,我们就可以回答第二个问题。
问题 3. 如何在 IIS Express 中修复它
从 Visual Studio 20131 开始,Visual Studio 不再使用名为 Cassini 的迷你 Web 服务器。它使用 IIS Express 本身的便携式安装(即不需要安装 IIS Express Windows 功能)。
大多数上述修复(尝试)(失败)在 IIS 中。但是没有人在 Visual Studio 2013 的 IIS Express 中处理过它们(这就是这个问题与其他问题的不同之处)。
问题 4。为什么会一直这样?
已经 15 年多了,而且这种情况仍在继续。 IIS 不能用作 Web 服务器一定有一个好的原因。但它是什么?我找不到任何知识库文章或博客文章来解释 IIS 团队为何拒绝正常运行。
阅读奖励
- 这个问题最流行的 Stackoverflow 问题:ASP.NET Web API - PUT & DELETE Verbs Not Allowed - IIS 8
研究工作
- HTTP Error 405.0 - Method Not Allowed, with POST (没有答案,php)
- HTTP Error 405.0 - Method Not Allowed (没有回答)
- POST verb not allowed (php)
- HTTP Error 405.0 - Method Not Allowed in ASP.net MVC5 (没有答案,mvc)
- JQuery File Uploader = error 405 IIS8.5 (jquery 没有回答)
- IIS 7.5 405 Method Not Allowed for PUT from StaticFileModule (没有答案,静态模块,iis)
- The HTTP verb POST used to access path is not allowed ("不要使用动词")
- http error 405 method not allowed error with web.API (卸载 WebDAV;已经不是)
- Handling Perl IIS 7.5 (perl)
- HTTP Error 405.0 - Method Not Allowed using Jquery ajax get (ajax)
- What causes an HTTP 405 "invalid method (HTTP verb)" error when POSTing a form to PHP on IIS? (iis6, ftp, php)
- http://forums.asp.net/t/1648594.aspx ("你试过ping你的电脑吗")
- Angular $resource POST/PUT to WebAPI 405 Method Not Allowed (尝试删除 WebDAV 处理程序和 WebDAV 模块)
- Http Error 405.0 - method not allowed iis 7.5 module staticfilemodule (无解)
- Unable to set up WebDAV with IIS 7 *(尝试设置 webdav)*
- Android SOAP request is returning HTTP Response 405 (无解)
- wcf service doesn't allow POST (wcf)
- WebAPI Delete not working - 405 Method Not Allowed (WebAPI;删除 WebDAV)
【问题讨论】:
标签: iis visual-studio-2013 iis-7 iis-7.5 iis-express