【问题标题】:Fire events for requests to static content without setting runAllManagedModulesForAllRequests to true在未将 runAllManagedModulesForAllRequests 设置为 true 的情况下触发对静态内容的请求的事件
【发布时间】:2013-09-30 17:44:16
【问题描述】:

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

问题:

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

问题一:

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

问题2:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    编辑:

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

    【讨论】:

    • 嗨,Abey,这是否也需要设置 runAllManagedModulesForAllRequests = true 来捕获 .html 等非托管处理程序?
    • 并非如此。您必须找到正确的模块,该模块必须启用静态内容的请求处理。例如,如果您正在寻找将表单身份验证应用于静态内容,请删除仅该模块的前置条件。
    • 这正是我想知道的:“正确模块的名称”应该是问题 1 的答案。
    • 呵呵——这正是你应该研究和发现的伙伴!这是解决您的问题的总体思路。我的直觉是,如果您使用 Forms Auth 或 WindowsAuth incase,您应该定位 FormsAuthentication module,否则。在任何情况下,事件都应该是 PostAuthenticateRequest event。请通过thisthis 找出要定位的事件。
    猜你喜欢
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 2016-06-14
    相关资源
    最近更新 更多