在web.config中获取HTTPModule自身的参数?
Get HTTPModule's own parameters in web.config?
我正在创建一个可以重复使用几次的 HTTPModule,但具有不同的参数。举个例子,一个请求重定向器模块。我可以使用 HTTPHandler 但这不是它的任务,因为我的进程需要在请求级别而不是 extension/path 级别工作。
无论如何,我想 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 的每个实例如何知道要采用哪些参数?如果我能在创建时获得名称(tpl01
或 tpl02
),之后我可以按名称查找它的参数,但我没有在 HTTPModule class 中看到任何 属性 ] 得到它。
非常欢迎任何帮助。提前致谢! :)
我认为,config (system.webServer\modules\add) 的这一部分不是为了向模块传递(存储)参数,而是为了注册模块列表以处理请求。
有关 "add" 元素中的可能属性,请参阅 - https://msdn.microsoft.com/en-us/library/ms690693(v=vs.90).aspx
这可能是解决您的问题的方法。
首先,使用需要从外部设置的字段定义模块:
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);
}
}
我正在创建一个可以重复使用几次的 HTTPModule,但具有不同的参数。举个例子,一个请求重定向器模块。我可以使用 HTTPHandler 但这不是它的任务,因为我的进程需要在请求级别而不是 extension/path 级别工作。
无论如何,我想 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 的每个实例如何知道要采用哪些参数?如果我能在创建时获得名称(tpl01
或 tpl02
),之后我可以按名称查找它的参数,但我没有在 HTTPModule class 中看到任何 属性 ] 得到它。
非常欢迎任何帮助。提前致谢! :)
我认为,config (system.webServer\modules\add) 的这一部分不是为了向模块传递(存储)参数,而是为了注册模块列表以处理请求。
有关 "add" 元素中的可能属性,请参阅 - https://msdn.microsoft.com/en-us/library/ms690693(v=vs.90).aspx
这可能是解决您的问题的方法。
首先,使用需要从外部设置的字段定义模块:
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);
}
}