Asp.net web api WebDAV和WebAPI一起导致错误:处理程序“ExtensionlessUrlHandler-Integrated-4.0”的模块列表中有一个坏模块“ManagedPipelineHandler”

Asp.net web api WebDAV和WebAPI一起导致错误:处理程序“ExtensionlessUrlHandler-Integrated-4.0”的模块列表中有一个坏模块“ManagedPipelineHandler”,asp.net-web-api,iis-7.5,webdav,Asp.net Web Api,Iis 7.5,Webdav,我已经在我的站点上安装并运行了WebDAV,作为一个虚拟子站点,我有一个MVC WebAPI站点,该API工作得很好,直到我尝试向其发送PUT请求,然后我得到以下错误: HTTP错误500.21-内部服务器错误 处理程序扩展LessUrlHandler-Integrated-4.0在其模块列表中有一个错误的模块ManagedPipelineHandler 如果我禁用WebDAV,那么一切正常,不会出现错误。这仅在启用WebDAV时发生 我的web.config中有以下所有代码: <syst

我已经在我的站点上安装并运行了WebDAV,作为一个虚拟子站点,我有一个MVC WebAPI站点,该API工作得很好,直到我尝试向其发送PUT请求,然后我得到以下错误:

HTTP错误500.21-内部服务器错误

处理程序扩展LessUrlHandler-Integrated-4.0在其模块列表中有一个错误的模块ManagedPipelineHandler

如果我禁用WebDAV,那么一切正常,不会出现错误。这仅在启用WebDAV时发生

我的web.config中有以下所有代码:

<system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="false">
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>
我尝试过搞乱各种应用程序池

我也厌倦了所有这些问题中提到的所有事情:


所有这些都没有解决我的问题,还有什么我没有尝试过的吗?

在处理程序的声明中可能存在打字错误问题

5.0故障排除

如果您收到与下面类似的错误,您的 节可能无效

HTTP错误500.21-内部服务器错误处理程序 模块列表中的模块ManagedPipelineHandler不正确,您可能会 具有不具有正确前提条件的处理程序映射。 IIS不会原谅打字错误,前提条件是 区分大小写。文本必须是predition=“integratedMode”或 前提条件=“classicMode”

此外,关于该条的评论还提出了另一项建议:

安德鲁·约翰逊2011年1月25日凌晨3:20:

我发现我也可以得到一个坏的处理程序 模块ManagedPipelineHandler在其模块列表中,如果该处理程序具有 RequiredAccess=无。对我来说,将此更改为requireAccess=Read 使错误消失

该注释可能适用于您的情况,因为我看到在applicationHost.config中,WebDav处理程序的条目是注意requredAccess=None:


我们最终带着这个去了微软,他们在回来之前审查了几个星期,说不可能在同一个站点上运行WebDAV和WebAPI


他们将在未来的IIS版本中尝试解决这个问题。

@jblaske的反应很好

如果您想暂时删除它,那么可能是最好的解决方案

如果您想一起删除处理程序,请执行以下步骤

打开IIS并转到有问题的站点。 单击处理程序映射 查找名为WebDAV的处理程序 选择并删除它
这是我的。

我从IIS手动删除WebDAV模块和处理程序以使其正常工作后,开始出现此错误。我必须删除WebDAV发布服务器角色才能克服此错误。删除此角色并重新启动IIS后,PUT工作正常


已找到此问题的备用解决方案。 推送服务器的修补程序时,默认框架设置回2.0。 转到framework 4.0文件夹C:\Windows\Microsoft.Net\Framework64\v4.0.30319,重新注册.Net framework 执行命令aspnet_regiis-I

检查web.config以匹配.Net framework版本

转到IIS->Application pool,将.Net framework值设置为4.0
重新启动IIS。

如果不删除WebDav处理程序,而是在ExtensionlessUrlHandler之后添加它,则在您的配置中重新启动IIS。它是否会导致相同的问题?感谢您帮助我删除这个麻烦的小程序*****:D+1
<add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />