我在我的网站上安装并运行了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>
我试过搞乱各种应用程序池。
我也厌倦了所有这些问题中提到的所有事情:
这些都没有解决我的问题,还有什么我还没试过吗?
答案 0 :(得分:22)
我们最终选择了这个,他们回顾了几个星期,然后回来说无法在同一个网站上运行WebDAV和WebAPI 。
他们将尝试在将来的IIS版本中解决此问题。
答案 1 :(得分:1)
在我从IIS手动删除WebDAV模块和处理程序以使PUT正常工作之后,我开始收到此错误。我必须删除“ WebDAV Publishing”服务器角色才能克服此错误。删除此角色并重新启动IIS之后,PUT可以正常工作。
答案 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。