【问题标题】:Detect mapped virtual directories from an ihttpmodule in a c# .net application从 c# .net 应用程序中的 ihttpmodule 检测映射的虚拟目录
【发布时间】:2010-02-07 05:04:57
【问题描述】:

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

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

[编辑 - 添加以下内容]

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

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

[再次编辑 - 添加更多]

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的解决方案 - 我想这是我必须走的路。似乎应该有比编写我自己的逻辑更“内置”和更有效的东西。我已经用我采取的其他方法的一些 cmets 更新了上面的问题 - 你认为这些方面可能有什么帮助吗?
    • 标记为答案,因为这就是我最终要做的。似乎仍然应该有一个更清洁的解决方案,但如果这是应该完成的方式,那么c'est la vie!
    猜你喜欢
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2013-01-13
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多