在IIS 7上,我正在尝试为我的ASP.NET Web应用程序使用自定义HttpHandler。我使用管道模式“经典”,.NET版本是4.0.30319,我的处理程序的web.config配置是:
<system.webServer>
<handlers>
<add name="MyHandler" path="*.myExtension" verb="*" type="Company.App.UI.Controls.MyHandler, Company.App.UI" resourceType="Unspecified" />
</handlers>
</system.webServer>
当我调用此处理程序时,我收到此错误:
HTTP Error 500.21 - Internal Server Error
Handler "MyHandler" has a bad module "ManagedPipelineHandler" in its module list
我进行了谷歌搜索,大多数人通过aspnet_regiis.exe / i命令重新注册ASP.NET来修复此问题,但这是不为我工作(命令完成,我重新启动IIS,但同样的错误)。我在两台不同的服务器上试过它,但结果相同。
我还应该尝试什么?谢谢
答案 0 :(得分:17)
无法将IIS托管处理程序配置为在经典模式下运行。如果要这样做,您应该在集成模式下运行IIS。
您可以在以下博文中了解有关模块,处理程序和IIS模式的更多信息:
IIS 7.0, ASP.NET, pipelines, modules, handlers, and preconditions
对于处理程序,如果在中设置了preCondition =“integratedMode” 映射时,处理程序只能以集成模式运行。上 另一方面,如果你设置preCondition =“classicMode”处理程序将 仅在经典模式下运行。 如果你省略这两个,那就是处理程序 可以在两种模式下运行,尽管对于托管是不可能的 处理强>
答案 1 :(得分:13)
幸运的是,这很容易解决。从提升的命令提示符运行以下命令:
%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
如果您使用的是32位计算机,则可能必须使用以下内容:
%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
答案 2 :(得分:10)
我遇到了同样的问题,并通过在运行
中运行以下内容来解决%windir%\ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -i
答案 3 :(得分:2)
我有同样的问题并且解决了它。我在stackoverflow上发布了自己的问题:
Can't PUT to my IHttpHandler, GET works fine
解决方案是在modules元素中将runManagedModulesForWebDavRequests设置为true。我的猜测是,一旦你安装WebDAV,所有PUT请求都与它相关联。如果需要PUT转到处理程序,则需要删除WebDAV模块并将此属性设置为true。
<modules runManagedModulesForWebDavRequests="true">
...
</modules>
因此,如果您在使用PUT动词时遇到问题并且已经安装了WebDAV,那么希望此解决方案可以解决您的问题。
答案 4 :(得分:1)
在Windows Server 2016上我使用过:
dism /online /enable-feature /featurename:IIS-ASPNET45 /all
也可以通过Powershell完成:
Install-WindowsFeature .NET-Framework-45-Features
答案 5 :(得分:0)
出现这种情况是因为您尚未安装/启动ASP.net服务。
在Windows 7,8,10中使用以下命令。
%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
答案 6 :(得分:-1)
我发现的一个解决方案是,您必须通过右键单击您在高级设置的应用程序池下拥有管理员的站点,将.Net Framework更改回v2.0。