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

Posted

技术标签:

【中文标题】WebDAV 和 WebAPI 一起导致错误:处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误模块“ManagedPipelineHandler”【英文标题】:WebDAV and WebAPI together cause Error: Handler "ExtensionlessUrlHandler-Integrated-4.0" has a bad module "ManagedPipelineHandler" in its module list 【发布时间】:2013-06-13 22:20:33 【问题描述】:

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

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

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

【问题讨论】:

在您的配置中,如果您不删除 WebDav 处理程序,而是在 ExtensionlessUrlHandler 之后添加它,是否会导致同样的问题? 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

@jblaske 反响不错。

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

如果您想一起删除处理程序,请按照以下步骤操作。

    打开 IIS 并转到相关站点。 点击“处理程序映射” 找到名为“WebDAV”的处理程序 选择它并删除它

这是我的original post。

【讨论】:

谢谢你帮我去掉这个麻烦的小***** :D +1【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

5.0 故障排除

如果您收到与以下类似的错误,您的 部分可能无效。

HTTP 错误 500.21 - 内部服务器错误处理程序“”有 模块列表中有一个坏模块“ManagedPipelineHandler”你可能 有一个不具备正确前提条件的处理程序映射。 IIS 不会容忍拼写错误,前提是 区分大小写。文本必须是 preCondition="integratedMode" 或 preCondition="classicMode"。

另外,来自 cmets 对该文章的另一个建议:

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

我发现我也可以得到“Handler has a bad 模块 ManagedPipelineHandler 在其模块列表中”,如果处理程序有 要求访问=“无”。对我来说,将其更改为 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" />

【讨论】:

以上是关于WebDAV 和 WebAPI 一起导致错误:处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误模块“ManagedPipelineHan的主要内容,如果未能解决你的问题,请参考以下文章

接口调优——WebAPI 过滤器,IIS WebDAV

WebAPI IIS PUT和DELETE请求失败

WebAPI IIS PUT和DELETE请求失败 405

删除时出现 WebAPI 405 错误

windows10挂载webdav

405 方法不允许 Web API 2