我使用WebClient
类型将* .cab文件上传到我的服务器。在服务器端,我使用PUT方法为* .cab文件注册了一个HTTP处理程序,如下所示:
<add name="ResultHandler" path="*.cab" verb="PUT" type="FileUploadApplication.ResultHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" />
但我总是得到“405方法不允许”的错误。答复说允许的方法如下:
Headers = {Allow: GET, HEAD, OPTIONS, TRACE
Content-Length: 1293
Content-Type: text/html
Date: Fri, 27 May 2011 02:08:18 GMT
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET}
即使我在我的Web应用程序的IIS请求筛选中明确允许PUT方法,仍然会出现相同的错误。
我怀疑这是一个与IIS相关的问题。我希望有人可以为我阐明这一点。
答案 0 :(得分:169)
此错误通常是由尝试处理此类请求的WebDAV模块引起的。一个简单的解决方案是从web.config文件中的system.webServer
部分的模块和处理程序中删除它。
这是一个配置示例:
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>
答案 1 :(得分:41)
我启用了失败请求跟踪,并获得以下信息:
<EventData>
<Data Name="ContextId">{00000000-0000-0000-0F00-0080000000FA}</Data>
<Data Name="ModuleName">WebDAVModule</Data>
<Data Name="Notification">16</Data>
<Data Name="HttpStatus">405</Data>
<Data Name="HttpReason">Method Not Allowed</Data>
<Data Name="HttpSubStatus">0</Data>
<Data Name="ErrorCode">0</Data>
<Data Name="ConfigExceptionInfo"></Data>
</EventData>
所以,我从我的IIS中卸载了WebDAVModule,现在一切都很好〜
IIS跟踪功能非常有用。
答案 2 :(得分:20)
托管MVC4 WebApi项目时,我遇到了WebDAV的这个问题。我通过在web.config中添加这一行来解决这个问题:
<handlers>
<remove name="WebDAV" />
<add name="WebDAV" path="*" verb="*" modules="WebDAVModule"
resourceType="Unspecified" requireAccess="None" />
</handlers>
如此处所述:http://evolutionarydeveloper.blogspot.co.uk/2012/07/method-not-allowed-405-on-iis7-website.html
答案 3 :(得分:18)
取自here,它对我有用:
1.转到IIS管理器。
2.点击你的应用程序。
3.转到&#34;处理程序映射&#34;。
4.在功能列表中,双击&#34; WebDAV&#34;。
5.点击&#34;请求限制&#34;。
6.在标签&#34;动词&#34;选择&#34;所有动词&#34;
7.按“确定”。
答案 4 :(得分:15)
我尝试了大部分答案,不幸的是,它们都没有完成。
这对我有用。您想要PUT的网站有3件事要做(选择网站):
打开WebDav Authoring Rules
,然后选择右侧栏中显示的Disable WebDAV
选项。
选择Modules
,找到WebDAV Module
并将其删除。
选择HandlerMapping
,找到WebDAVHandler
并将其删除。
重新启动IIS。
答案 5 :(得分:15)
删除WebDAV模块就足够了。只需更改您的Web.config:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
答案 6 :(得分:8)
答案 7 :(得分:4)
无论出于何种原因,在我的web.config中将WebDAVModule标记为“remove”还不足以解决我的问题。
我找到了做解决问题的另一种方法。如果你在同一条船上,试试这个:
这可以防止WebDAV拒绝它不支持的动词,从而允许PUT不受干扰地流入您的RESTful处理程序。
答案 8 :(得分:3)
我遇到了与PUT,PATCH和DELETE相同的问题,但没有安装任何WebDav。本文中的第1项决议最终帮助了我:http://support.microsoft.com/kb/942051
答案 9 :(得分:2)
对我来说,这个错误不会消失并允许PUT方法,无论我做了什么..卸载webdav,将配置放在web.config中以从处理程序和模块中删除webdav,并将PUT设置为允许的动词on请求过滤iis ..并确保处理请求的iis处理程序映射已配置PUT ..
我的问题最终是由于ASP.NET 4.5 Extensions安装不当造成的。从服务器角色和功能中删除了与asp.net相关的所有内容。重新启动。读取角色并重新启动。一切都适用于上面的配置。
---以下将使PUT被接受,但会将其发送给错误的处理程序。 - 以下是
最后,在i上的TRACE处理程序映射中添加PUT动词作为允许的动词...因为我启用了失败的错误跟踪,并且此动词不允许动词。
上次我在另一台服务器的IIS上遇到同样的问题,原因是由于缺少了&#39; /&#39;在URL的末尾,因为它使用默认处理程序而不使用默认文档,现在我意识到..所以检查IIS处理程序映射,如果没有别的帮助。
答案 10 :(得分:2)
我遇到了这个问题,但没有任何与WebDAV相关的问题。就我而言,客户端正在向www.myServer.com/api/chart发送POST。此调用应由&#34; ExtensionlessUrlHanlder-Integrated-4.0&#34;处理,但是,在我的服务器目录中创建了一个本地文件结构&#34; ... \ Server \ api \ chart \&# 34 ;.这意味着&#34; StaticFile&#34;处理程序被调用。删除这些本地文件最终解决了问题。
答案 11 :(得分:2)
在aspnet核心上运行RESTful API时,我遇到了同样的问题。
我不想卸载WebDAV,因此我尝试了上述大多数补救措施。我试图在网站和服务器本身上都设置动词=“ *”,但没有成功。
对我来说,诀窍是:
IIS管理器->站点-> MySite-> HandlerMappings-> aspNetCore->编辑
->请求限制->访问->无(它是脚本)。
此后,即使我替换了原始的WebDAV选项,一切都可以正常工作。
答案 12 :(得分:2)
我使用的是Angular 8,并且是.NET核心API。 我将以下内容添加到我的服务web.config文件中。那解决了我的错误。
<system.webServer>
<modules runAllManagedModulesForAllRequests="false">
<remove name="WebDAVModule" />
</modules>
</system.webServer>
答案 13 :(得分:1)
我的另一个提示。我使用过PHP + IIS,而PHP的Handler Mappings没有PUT动词。
转到IIS管理器 - &gt;您的站点 - &gt;处理程序映射 - &gt; PHPxx_via_FastCGI-&gt;请求限制 - &gt;动词,然后添加PUT。
就是这样!
答案 14 :(得分:1)
这是我的解决方案,alhamdulillah 它奏效了。
参考:https://docs.microsoft.com/en-US/troubleshoot/iis/http-error-405-website
答案 15 :(得分:1)
对于Windows Server 2012->转到服务器管理器->删除角色和功能->服务器角色-> Web服务器(IIS)-> Web服务器->常用HTTP功能->取消选中WebDAV发布并将其删除->重新启动服务器。
答案 16 :(得分:1)
PUT和DELETE生效之前,另一个需要重新配置的重要模块是选项动词
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="OPTIONSVerbHandler" />
<remove name="WebDAV" />
<add name="OPTIONSVerbHandler" path="*" verb="*" modules="ProtocolSupportModule" resourceType="Unspecified" requireAccess="Script" />
</handlers>
答案 17 :(得分:0)
我在 IIS10 中为 asp.net core 5 执行 PUT 和 DELETE 请求时遇到了同样的问题。
我刚刚在 web.config 中添加了以下几行,问题已解决。
<system.webServer>
<modules runAllManagedModulesForAllRequests="false">
<remove name="WebDAVModule" />
</modules>
</system.webServer>
您也可以通过 IIS 的其他方式解决。
在 IIS 中,选择应用程序
Add rules to allow HTTP verbs in Request Filtering (But this alone doesn't work).
Go to "Modules", then select the "WebDAV Publishing" module and remove it.
Go to "Handler Mappings", then select the "WebDAV" and remove it.
in cmd run IISRESET
答案 18 :(得分:0)
对于asp.net core 5
IIS-> 站点 -> MySite -> HandlerMappings -> aspNetCore -> 请求限制 -> 访问 -> 无(它是脚本)。
答案 19 :(得分:0)
这对我有用:
打开IIS,然后单击您的站点。
1 - Double Click on the Modules
2 - Right Click on WebDavPublishing and remove.
3 - Restart running WebSite.
答案 20 :(得分:0)
要防止WebDav被启用,请从ApplicationHost.config中删除以下条目:
select r.*, c.*
from regions r cross join
categories c;
该条目位于模块部分。
配置的确切位置:
<add name="WebDAVModule" />
答案 21 :(得分:0)
在我的情况下,我已将Web Deploy重新定位到另一个端口,该端口也是IIS端口(不是80)。我一开始并没有意识到,但即使在同一端口下都没有运行错误,似乎Web Deploy最有可能因为某些原因而首先响应而不是IIS,导致此错误。我只是将我的IIS绑定移动到另一个端口,一切都很好。 ;)
答案 22 :(得分:0)
如果IIS应用程序池在经典模式下运行,请确保在web.config中有以下内容
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" modules="IsapiModule" scriptProcessor="c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />