IIS7.5中“PUT”方法的“405方法不允许”

时间:2011-05-27 02:20:35

标签: iis iis-7

我使用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相关的问题。我希望有人可以为我阐明这一点。

23 个答案:

答案 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件事要做(选择网站):

  1. 打开WebDav Authoring Rules,然后选择右侧栏中显示的Disable WebDAV选项。

  2. 选择Modules,找到WebDAV Module并将其删除。

  3. 选择HandlerMapping,找到WebDAVHandler并将其删除。

  4. 重新启动IIS。

答案 5 :(得分:15)

删除WebDAV模块就足够了。只需更改您的Web.config:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule" />

答案 6 :(得分:8)

最好删除未使用的WebDAV功能。转到程序和功能 =&gt; 打开或关闭Windows功能并禁用

下的 WebDAV发布

互联网信息服务 =&gt; 万维网服务 =&gt; 常见HTTP功能

enter image description here

答案 7 :(得分:4)

无论出于何种原因,在我的web.config中将WebDAVModule标记为“remove”还不足以解决我的问题。

我找到了解决问题的另一种方法。如果你在同一条船上,试试这个:

  1. 在IIS管理器中,选择需要支持PUT的应用程序。
  2. 在功能视图中,找到 WebDAV创作规则。双击它,或从上下文菜单中选择打开功能(右键单击)。
  3. 在“操作”窗格中,找到并单击 WebDAV设置...
  4. 在WebDAV设置中,找到请求过滤行为,然后找到允许动词过滤。将允许动词过滤设置为错误
  5. 在“操作”窗格中,单击应用
  6. 这可以防止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 它奏效了。

  1. 以管理员身份打开记事本。
  2. 打开这个文件 %windir%\system32\inetsrv\config\applicationhost.config
  3. 按 Ctrl-F 查找单词“handlers accessPolicy”
  4. 在单词“GET、HEAD、POST”之后添加单词“DELETE”。
  5. 句子会变成
  6. “PHP_via_FastCGI”一词可以有替代词,例如“PHP_via_FastCGI1”或“PHP_via_FastCGI2”。
  7. 保存文件。

参考: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>

另请参阅此帖子:https://stackoverflow.com/a/22018750/9376681

答案 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" />
相关问题