从c#.net应用程序中的ihttpmodule检测映射的虚拟目录

时间:2010-02-07 05:04:57

标签: c# .net iis virtual-directory ihttpmodule

我有一个.net网站,其中包含我编写的IHttpModule来执行某些任务(授权等)。但是在网站内有许多虚拟目录映射到第三方应用程序,遗憾的是我无法更改或移动(例如社区服务器论坛,adxstudio cms等)。

我正在寻找一种方法来阻止我的IHttpModule在请求这些虚拟目录的内容时运行。这可能吗?

[编辑 - 添加以下内容]

我一直在尝试在虚拟目录应用程序的Web.config文件中的<remove name="X"/>节点内添加<httpModules>,但似乎没有用。它可能不是一个很好的解决方案,因为第三方应用程序可以更新,所以我不想要求更改其代码/配置。

我还尝试在父Web.config中的<location path="." inheritInChildApplications="false">节点周围添加<system.web>,但这似乎也不起作用。

[再次编辑 - 添加更多]

原因是不起作用是因为IHttpModule的Init事件每个应用程序生命周期只触发一次(而不是像我假设的那样按请求)。由于我在init事件中添加了一堆事件侦听器,因此仍会在后续请求中触发...

1 个答案:

答案 0 :(得分:2)

如果您有这些目录及其虚拟路径的列表,则可以构建它们的查找。

对于触发模块的每个HttpRequest,您可以检查虚拟路径以查看它是否属于查找中的任何路径。如果是,则可以不执行任何操作或退出模块的代码。

PS:对于性能问题,您可能希望将查找存储在应用程序状态(例如hashmap等)

相关问题