我有一个.net网站,其中包含我编写的IHttpModule来执行某些任务(授权等)。但是在网站内有许多虚拟目录映射到第三方应用程序,遗憾的是我无法更改或移动(例如社区服务器论坛,adxstudio cms等)。
我正在寻找一种方法来阻止我的IHttpModule在请求这些虚拟目录的内容时运行。这可能吗?
[编辑 - 添加以下内容]
我一直在尝试在虚拟目录应用程序的Web.config文件中的<remove name="X"/>
节点内添加<httpModules>
,但似乎没有用。它可能不是一个很好的解决方案,因为第三方应用程序可以更新,所以我不想要求更改其代码/配置。
我还尝试在父Web.config中的<location path="." inheritInChildApplications="false">
节点周围添加<system.web>
,但这似乎也不起作用。
[再次编辑 - 添加更多]
原因是不起作用是因为IHttpModule的Init事件每个应用程序生命周期只触发一次(而不是像我假设的那样按请求)。由于我在init事件中添加了一堆事件侦听器,因此仍会在后续请求中触发...
答案 0 :(得分:2)
如果您有这些目录及其虚拟路径的列表,则可以构建它们的查找。
对于触发模块的每个HttpRequest,您可以检查虚拟路径以查看它是否属于查找中的任何路径。如果是,则可以不执行任何操作或退出模块的代码。
PS:对于性能问题,您可能希望将查找存储在应用程序状态(例如hashmap等)