我正在创建一个HTTPModule,它可以重复使用几次,但是使用不同的参数。以请求重定向器模块为例。我可以使用HTTPHandler,但这不是它的任务,因为我的流程需要在请求级别而不是扩展名/路径级别工作。

无论如何,我想通过以下方式获取我的web.config:

<system.webServer>
    <modules>
        <add name="tpl01" type="TemplateModule" arg1="~/" arg2="500" />
        <add name="tpl02" type="TemplateModule" arg1="~/" arg2="100" />
    </modules>
</system.webServer>

但是我能找到的大多数信息是this。我说,是的,我可以获得整个<modules>标记,但是我的HTTPModule的每个实例如何知道采用哪个参数?如果可以在创建时获得名称(tpl01tpl02),则可以在以后按名称查找其参数,但是我没有在HTTPModule类中看到任何属性来获得该名称。

任何帮助将是非常欢迎的。提前致谢! :)

最佳答案

这可能是解决您问题的方法。

首先,使用需要在外部设置的字段定义模块:

public class TemplateModule : IHttpModule
{
    protected static string _arg1;
    protected static string _arg2;

    public void Init(HttpApplication context)
    {
        _arg1 = "~/";
        _arg2 = "0";

        context.BeginRequest += new EventHandler(ContextBeginRequest);
    }

    // ...
}

然后,在您的Web应用程序中,每次需要将模块与这些值的不同集合一起使用时,继承模块并覆盖字段:
public class TemplateModule01 : Your.NS.TemplateModule
{
    protected override void ContextBeginRequest(object sender, EventArgs e)
    {
        _arg1 = "~/something";
        _arg2 = "500";

        base.ContextBeginRequest(sender, e);
    }
}

public class TemplateModule02 : Your.NS.TemplateModule
{
    protected override void ContextBeginRequest(object sender, EventArgs e)
    {
        _arg1 = "~/otherthing";
        _arg2 = "100";

        base.ContextBeginRequest(sender, e);
    }
}

关于c# - 在 web.config 中获取 HTTPModule 自己的参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32274146/

10-12 15:07