IIS7的集成模式下如何让自定义的HttpModule不处理静态文件(.html .css .js .jpeg等)请求...

今天将开发好的ASP.NET站点部署到客户的服务器上后,发现了一个非常头疼的问题,那么就是IIS7的应用程序池是集成模式的话,ASP.NET项目中自定义的HttpModule会处理静态文件(.html .css .js .jpeg等)请求,而这不是我预期的效果,因为我只想让托管文件(aspx, ascx 及 MVC等)的请求被自定义HttpModule处理,但是我发现在IIS7的集成模式下所有请求都会进入HttpModule被处理。

 

后来我尝试将IIS7站点下的应用程序池改为了经典模式,这样的话静态文件的请求的确不会进入自定义HttpModule了,但是出现了另一问题ASP.NET项目中自定义的HttpHandler都访问失败了。。。这让我颇为头疼要么不能用自定义HttpModule。要么不能用自定义HttpHandler。

 

后来在网上找了资料才发现,ASP.NET 4.0后Web.config文件的Module配置节点有一个可选项叫preCondition如下面代码所示:

<system.webServer>
  <modules>
    <add name="MyModule" type="MyNamespace.MyModule" preCondition="managedHandler" />
  </modules>
</system.webServer>

注意这个选项只有在IIS7才用到的<system.webServer>的<modules>配置项才有,在老IIS6的<system.web>的<httpModules>配置节点下是没有的。加上了preCondition="managedHandler"这个配置项后,在IIS7的集成模式下,上面自定义的MyModule这个HttpModule就不会去处理静态文件(.html .css .js .jpeg等)的请求了,只会处理托管文件(aspx, ascx 及 MVC等)的请求。

 

此外在<system.webServer>的<modules>节点上还有个配置项叫runAllManagedModulesForAllRequests如下面代码所示:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="MyModule1" type="MyNamespace.MyModule1" preCondition="managedHandler" />
    <add name="MyModule2" type="MyNamespace.MyModule2" preCondition="managedHandler" />
    <add name="MyModule3" type="MyNamespace.MyModule3" preCondition="managedHandler" />
    <add name="MyModule4" type="MyNamespace.MyModule4" preCondition="managedHandler" />
    <add name="MyModule5" type="MyNamespace.MyModule5" />
  </modules>
</system.webServer>

如果你将runAllManagedModulesForAllRequests设置为true,那么ASP.NET就会忽略<modules>所有子节点的preCondition设置,相当于上面代码中MyModule1、MyModule2、MyModule3和MyModule4都没有设置preCondition="managedHandler",MyModule1到MyModule5仍然会处理静态文件(.html .css .js .jpeg等)的请求,所以runAllManagedModulesForAllRequests相当于是一个快捷设置,可以关闭<modules>所有子节点的preCondition设置,强制使所有自定义的HttpModule既处理静态文件(.html .css .js .jpeg等)请求又处理托管文件(aspx, ascx 及 MVC等)请求,默认情况下runAllManagedModulesForAllRequests是为false的。

 

说了这么多有了preCondition这个设置,大家又可以安心使用HttpModule了,希望对被坑过的同学有所帮助!

 

转载于:https://www.cnblogs.com/OpenCoder/p/5854454.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: HTTP 错误 500.19 表示服务器上的配置错误。这个错误通常是由于服务器上的 web.config 文件中存在问题导致的。可能的原因包括:配置文件缺少某些必需的节点、配置文件中存在语法错误等。建议检查 web.config 文件并确保其正确配置。 ### 回答2: HTTP 错误 500.19 - 内部服务器错误是指在处理Web请求时服务器遇到了问题,并且无法完成请求。这个错误通常会出现在IIS(Internet Information Services)服务器上,并且是由于配置文件中的一些问题导致的。 这个错误可能有多种原因,以下是一些可能的解决方法: 1. 检查配置文件:首先,检查配置文件中是否存在错误,可能是由于错误的语法或配置项导致的。可以查看IIS的错误日志,以了解具体的配置错误信息。 2. 权限问题:HTTP 错误 500.19 也可能是由于权限问题引起的。确保应用程序所需的目录或文件具有正确的权限。可以通过在目录或文件上右击,选择“属性”,然后点击“安全”选项来设置权限。 3. 文件或目录丢失:如果错误提示中指示了丢失的文件或目录,那么确保这些文件或目录是存在的。如果缺少某些文件,可以尝试重新安装相应的应用程序或重新上传文件。 4. 配置冲突:有时,不同的模块或组件可能有冲突,导致服务器错误。在这种情况下,可以尝试禁用一些模块或组件,以确定是哪个引起了问题。可以通过IIS管理器来禁用模块或组件。 5. 应用程序池相关问题:HTTP 错误 500.19 也可能是由于应用程序池相关的问题引起的。可以尝试重启应用程序池来解决问题。此外,确保应用程序池的.NET版本和托管管道模式与应用程序的要求匹配。 总结起来,解决HTTP 错误 500.19 - 内部服务器错误通常需要仔细检查配置文件、权限、文件或目录等方面的问题,并根据具体情况采取适当的解决方法。如果问题仍然存在,可以查找更详细的错误信息或咨询专业人士以获得帮助。 ### 回答3: HTTP错误500.19 - 内部服务器错误是指在访问网站时,服务器遇到了一个无法处理的配置问题。 通常情况下,这个错误是由于IIS(Internet Information Services)配置文件中的一些问题引起的。可能的原因包括: 1. 配置文件中的语法错误,比如缺少或多余的符号。 2. 配置文件中的键值错误,比如一个键被重复定义。 3. 所需的模块未安装或启用。 4. 文件或目录的权限设置不正确。 5. Web.config文件缺失或损坏。 为了解决此问题,可以尝试一下解决方法: 1. 使用管理员权限运行命令提示符,并执行`%windir%\system32\inetsrv\appcmd list config -section:system.webServer/asp`命令,检查是否有语法错误。 2. 确保Web.config文件存在且没有损坏。 3. 确认所需的模块已经安装并启用。 4. 检查文件或目录的权限设置,确保IIS_IUSRS组拥有访问权限。 5. 如果使用了URL重写或自定义HTTPModule,确保相关的模块已在IIS中注册。 如果以上方法仍无法解决问题,可能需要进一步检查IIS配置以确定具体原因。在这种情况下,可以考虑参考Microsoft官方文档或联系服务器管理员来获取更详细的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值