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

我使用 WebClient类型上传 * 。把出租车文件传到我的服务器上。在服务器端,我为 * 注册了一个 HTTP 处理程序。使用 PUT 方法的计程车文件如下:

 <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 有关的问题。我希望有人能为我解释一下。

188071 次浏览

我启用了失败的请求跟踪,得到了以下信息:

 <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 跟踪特性非常有用。

我在主持 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

这个错误通常是由试图处理这类请求的 WebDAV 模块引起的。一个简单的解决方案是从 web.config 文件中的模块和 system.webServer部分的处理程序中删除它。 下面是一个配置示例:

<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>

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

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

我有相同的问题与 PUT,补丁和删除,但没有任何与 WebDav 安装。本文中的决议1最终帮助了我: http://support.microsoft.com/kb/942051

无论出于什么原因,在 web.config 中将 WebDAVModule 标记为“ delete”都不足以修复我的问题。

我发现了另一种解决 是的问题的方法。如果你也是这样,试试这个:

  1. 在 IIS 管理器中,选择需要支持 PUT 的应用程序。
  2. 在特征视图中,找到 WebDAV 创作规则。双击它,或者从上下文菜单中选择 开放特辑(右击)。
  3. 在“操作”窗格中,查找并单击 WebDAV 设置..。
  4. 在 WebDAV 设置中,找到 请求过滤行为,在它下面找到 允许动词过滤。将 允许动词过滤设置为 假的
  5. 在“操作”窗格中,单击 申请

这可以防止 WebDAV 拒绝它不支持的动词,从而允许 PUT 流通到 RESTful 处理程序。

对我来说,无论我做什么,这个错误都不会消失并允许 PUT 方法。.卸载 webdav,将配置放在 web.config 中以从处理程序和模块中删除 webdav,并在 iis 上的请求过滤器上将 PUT 设置为允许的谓词。.并确保处理请求的 iis 处理程序映射配置了 PUT。.

我的问题最终是由于 ASP.NET 4.5扩展的安装不当造成的。从服务器角色和特性中删除了与 asp.net 相关的所有内容。重新开始。读取角色并重新开始。所有的工作与上述配置。

——下面的代码将使 PUT 被接受,但是会将其发送给错误的处理程序。——忽略下面的代码

最后,将 PUT 谓词作为允许的谓词添加到已工作的 iis 上的 TRACE 处理程序映射上。.因为我启用了失败的错误跟踪,而且这个动词不允许使用该动词。

上次我在另一个服务器的 IIS 上遇到同样的问题,这是由于在 URL 的末尾缺少一个“/”,因为它使用了一个默认的处理程序,而没有使用默认的文档,现在我意识到了这一点。.因此,如果没有其他帮助,请检查 IIS 处理程序映射。

我尝试了大部分的答案,不幸的是,没有一个是完整的。

以下是对我有效的方法。对于想要 PUT 的站点,有3件事情要做(选择站点) :

  1. 打开 WebDav Authoring Rules,然后选择右栏上的 Disable WebDAV选项。

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

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

重新启动 IIS。

如果 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" />

摘自 给你,对我很有效:

  1. 转到 IIS 经理。

  2. 点击你的应用。

  3. 转到“处理程序映射”。

  4. 在功能列表中,双击“ WebDAV”。

  5. 点击“请求限制”。

  6. 在“动词”选项卡中选择“所有动词”。

  7. 按 OK 键。

我有这个问题,但没有相关的 WebDAV 是问题。在我的案例中,客户端向 www.myserver.com/api/chart 发送了一个 POST。这个调用应该由“ Extensionless UrlHander-Integration-4.0”处理,但是,在我的服务器目录“ ... Server api chart”中创建了一个本地文件结构。这意味着调用的是“ StaticFile”处理程序。删除那些本地文件最终解决了这个问题。

在我的例子中,我将 WebDeploy 重新定位到另一个端口,也就是 IIS 端口(不是80)。我一开始并没有意识到,尽管在同一个端口下运行两个端口都没有错误,但是由于某种原因,Web Deploy 很可能是第一个响应而不是 IIS,从而导致了这个错误。我刚刚将 IIS 绑定移动到另一个端口,一切正常。;)

最好只是删除未使用的 WebDAV 特性

Internet 信息服务 = > 万维网服务 = > < strong > 通用 HTTP 特性

enter image description here

我的另一个提示。我使用的是 PHP + IIS,PHP 的 Handler 映射没有 PUT 动词。

转到 IIS Manager-> Your site-> Handler Maps-> PHPxx _ via _ FastCGI-> Request Constrtions-> Verbs,然后添加 PUT。

就是这样!

为了防止 WebDav 被启用,从 ApplicationHost.config 中删除以下条目: <add name="WebDAVModule" />

条目位于模块部分。

配置的确切位置: C:\Windows\System32\inetsrv\config\applicationHost.config

对于 Windows Server 2012-> 转到服务器管理器-> 删除角色和功能-> 服务器角色-> Web Server (IIS)-> Web Server-> Common HTTP Features-> 取消选中 WebDAV Publishing 并删除它-> Restart Server。

在 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

以下是对我有效的方法:

打开 IIS 并单击网站。

  1. 双击模块
  2. 右键单击 WebDavPublishing 并删除。
  3. 重新启动网站。

我使用的是 Angular 8,而且是.NET 核心 API。 我在我的服务 web.config 文件中添加了以下内容。

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

我遇到了同样的问题,在 aspnet 核心上运行 RESTful API。

我不想卸载 WebDAV,我尝试了上面描述的大部分补救措施。我试图在站点和服务器本身上设置动词 = “ *”,但都没有成功。

对我来说最有效的方法是:

IIS 管理器-> 网站-> MySite-> Handler 映射-> aspNetCore-> 编辑

- > 请求限制-> 访问-> 无(这是脚本)。

之后,一切工作,即使我替换原来的 WebDAV 选项。

这是我的解决办法,真主保佑,它奏效了。

  1. 以管理员身份打开记事本。
  2. 打开这个文件% windir% system32 inetsrv config applicationhost.config
  3. 按 Ctrl-F 找到单词“ handlers access Policy”
  4. 在“获取、头部、发布”之后添加单词“删除”。
  5. 句子将变成 < add name = “ PHP _ via _ FastCGI”path = “ * . PHP”谓词 = “ GET,HEAD,POST,DELETE”
  6. 单词“ PHP _ via _ FastCGI”可以有其他单词,如“ PHP _ via _ FastCGI1”或“ PHP _ via _ FastCGI2”。
  7. 保存文件。

参考资料: https://learn.microsoft.com/en-US/troubleshoot/iis/http-error-405-website

用于 asp.net 核心5

IIS-> Sites-> MySite-> HandlerMappings-> aspNetCore-> Request Constrtions-> Access-> None (它是脚本)。

对于 asp.net 核心5的 IIS10中的 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

如果您只是在您的机器上开发,使用 IIS 来运行您的应用程序,而您不打算使用 WebDAV,那么只需进入控制面板 > 添加或删除 Windows 功能,并禁用 WebDAV

Control Panel > Add or Remove Windows features and disable WebDAV

如果还有人使用 ASP 经典需要解决的方法不允许给 ASP 带来麻烦,你还需要重新注册 ASP 经典处理程序告诉它处理额外的动词。默认情况下,它只处理 GET、 HEAD 和 POST。

<system.webServer>


<!-- other stuff ... -->


<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
<remove name="ASPClassic" />
<add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST,PUT,DELETE,PATCH" modules="IsapiModule" scriptProcessor="%windir%\system32\inetsrv\asp.dll" resourceType="File" />
</handlers>
</system.webServer>