是否有可能在运行时启用/禁用HttpModule ?

本文关键字:禁用 HttpModule 启用 有可能 运行时 是否 | 更新日期: 2023-09-27 18:17:45

有人知道,如果有可能在运行时启用/禁用HttpModule吗?我这么说并不是说它必须完全关闭。我只是想能够阻止BeginRequest代码被执行,然后再一次,过了一段时间,能够重新启用那个代码。有什么办法吗?

编辑:问题中的HttpModule拦截了针对一个web服务的所有请求,并将它们复制到另一个WS。因为我只希望这种行为用于负载测试,我希望能够在不需要的时候打开/关闭它,而不必停止服务,手动编辑web。配置并重新启动服务。

是否有可能在运行时启用/禁用HttpModule ?

可以加载httpmodule而不用使用PreApplicationStartMethod属性和Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule方法。

你可以使用一个应用参数作为标志,并在BeginRequest中检查它的值(第一件事)。比如:

public class Global : HttpApplication
{
    protected bool myFlag;
    //....
    protected internal void Application_BeginRequest(object sender, EventArgs e)
    {
        if (!myFlag) return;
        // ....
    }
}

在init方法中,通过将回调方法添加到应用程序事件中来订阅BeginRequest。在这种情况下,您应该能够取消订阅事件。我想这样的代码应该可以工作。

应用程序。BeginRequest -= (new EventHandler(this.Application_BeginRequest));

当需要时,您可以使用

再次将回调添加到事件中

应用程序。BeginRequest += (new EventHandler(this.Application_BeginRequest));