2

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

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

[编辑 - 添加以下内容]

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

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

[再次编辑 - 添加更多]

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

4

1 回答 1

2

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

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

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

于 2010-02-07T05:24:35.307 回答