在web.config中获取HTTPModule自己的参数?

时间:2015-08-28 15:04:06

标签: c# asp.net web-config arguments httpmodule

我正在创建一个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类中看到任何属性来获取它。

任何帮助都会非常受欢迎。提前致谢! :)

2 个答案:

答案 0 :(得分:2)

我认为,这部分配置(system.webServer \ modules \ add)并不是要将参数传递(存储)到模块,而是要注册模块列表来处理请求。

对于&#34中可能的属性;添加&#34;元素见 - https://msdn.microsoft.com/en-us/library/ms690693(v=vs.90).aspx

答案 1 :(得分:-2)

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

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

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);
    }
}