在不将runAllManagedModulesForAllRequests设置为true的情况下触发静态内容请求的事件

时间:2013-09-25 08:20:58

标签: asp.net iis-7 web-config iis-6 static-content

我正在寻找一种更精确的解决方案来处理ASP.NET生命周期中对静态内容的请求,而不将runAllManagedModulesForAllRequests设置为true。 据我所知,runAllManagedModulesForAllRequests = "true"的效果是每个模块的前提条件属性将设置为""

问题:

  • 我必须保护Web应用程序的子文件夹中的静态内容,以防止未经授权的访问
  • 要在ASP.NET生命周期中包含对这些静态内容的请求,因此触发了一些事件,我在web.config中将runAllManagedModulesForAllRequests设置为true
  • 因为这个解决方案变成了大轮,并且所有托管模块都受到整个应用程序的影响,所以我正在寻找一种更适合的解决方案,仅限于需要此行为的子文件夹。
  • 我需要IIS6和II7的解决方案

问题1:

必须重置哪些模块(precondition = "")才能触发global.asax.cs事件(例如Application_BeginRequest)以获取静态内容的请求?

问题2:

是否可以将此请求处理限制为对单个子文件夹的请求(例如,可能通过在此子文件夹中放置一个经过调整的web.config,对主web.config进行调整,...)

任何建议将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

您是否考虑过为global.asax的正确事件注册自定义HttpModule,然后仅使用主location本身中的web.config属性为子目录启用HttpModule?这只是一个可能的解决方案的想法 - 我没有想过它..

<location path="subDirectoryPath">
   <system.web>
     <httpmodules>
        <add type="MyCustomModule.Name" name="MyCustomModule" />      
     </httpmodules>
   </system.web>
</location>

编辑:

您可能必须覆盖web.config,并引入其中的所有httpModule部分,然后使用正确的前提条件将自定义模块插入到正确的位置。 这是为了避免将runAllManagedModulesForAllRequests设置为true