WebDAV和WebAPI一起导致错误:处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误的模块“ManagedPipelineHandler”

时间:2013-06-17 20:37:35

标签: asp.net-web-api iis-7.5 webdav

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

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

处理程序“ExtensionlessUrlHandler-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>

我试过搞乱各种应用程序池。

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

How to get rid of this error Handler "PageHandlerFactory-Integrated" has a bad module "ManagedPipelineHandler" in its module list

Handler "ExtensionlessUrlHandler-Integrated-4.0" has a bad module "ManagedPipelineHandler" in its module list

How to fix: Handler "PageHandlerFactory-Integrated" has a bad module "ManagedPipelineHandler" in its module list

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

4 个答案:

答案 0 :(得分:22)

我们最终选择了这个,他们回顾了几个星期,然后回来说无法在同一个网站上运行WebDAV和WebAPI

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

答案 1 :(得分:1)

在我从IIS手动删除WebDAV模块和处理程序以使PUT正常工作之后,我开始收到此错误。我必须删除“ WebDAV Publishing”服务器角色才能克服此错误。删除此角色并重新启动IIS之后,PUT可以正常工作。

enter image description here

答案 2 :(得分:0)

您可能在处理程序声明中遇到拼写错误问题。 Thomas Marquardt's Blog says

  

5.0故障排除

     

如果您收到类似于下面的错误,那么您的错误   部分可能无效。

     

HTTP错误500.21 - 内部服务器错误处理程序“”具有   你的模块列表中的错误模块“ManagedPipelineHandler”你可能   有一个没有正确前置条件的处理程序映射。   IIS在拼写错误方面并不宽容,前提条件也是如此   区分大小写。文本必须是preCondition =“integratedMode”或   前提=” classicMode”。

此外,该条评论的另一个建议是:

  

Andrew Johnson 2011年1月25日上午3:20#:

     

我发现我也可以得到“处理程序有坏处   模块ManagedPipelineHandler在其模块列表中“如果处理程序有   requireAccess = “无”。对我来说,将此更改为requireAccess =“Read”   让错误消失了。

该评论可能适用于您的案例,因为我在applicationHost.config中看到WebDav处理程序的条目是(注意requredAccess="None"):

<add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />

答案 3 :(得分:0)

找到了此问题的替代方法。 推送服务器的修补程序后,默认框架设置为2.0。 通过转到Framework 4.0文件夹C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319重新注册.Net Framework 执行命令aspnet_regiis -I

检查web.config以匹配.Net框架版本  

转到IIS->应用程序池,将.Net框架值设置为4.0 重新启动IIS。