我正在编写一个asp.net HTTP模块,它需要从本地文件(比如存储在应用程序根目录中的config.xml)读取配置数据一次然后根据配置执行一些处理来电请求。
由于Asp.NET模块中没有可用的Application_Start / Application_init挂钩,因此处理场景的最佳方法是什么。我试图避免每次请求时读取配置文件。理想情况下,我想在应用程序启动时读取配置文件。
我只需要在http模块中对此进行编码,并且不想使用Global.asax
答案 0 :(得分:1)
我会选择一个简单的房产,就像这样......
public MyConfig Config
{
get
{
MyConfig _config = Application["MyConfig"] as MyConfig;
if (_config == null)
{
_config = new MyConfig(...);
Application["MyConfig"] = _config;
}
return _config;
}
}
这样您就可以通过属性从Config访问您需要的任何内容......
int someValue = Config.SomeValue;
如果尚未
,则将其加载到应用程序对象中如果您需要基于每个用户而不是全局配置,那么只需使用Session["MyConfig"]
代替Application["MyConfig"]
答案 1 :(得分:0)
不确定这是否有效,但您可以在模块init method中实现此功能。
答案 2 :(得分:0)
在httpmodule的init方法中,您可以在上下文中连接到事件。
例如:
public void Init(HttpApplication context)
{
context.PostRequestHandlerExecute += (sender, e) =>
{
Page p = context.Context.Handler as Page;
if (p != null)
{
///Code here
}
};
}
答案 3 :(得分:0)
public SomeHttpModule : IHttpModule
{
private static readonly Configuration Configuration =
ConigurationReader.Read();
}
答案 4 :(得分:0)
静态变量就行了。这是代码,如果有人感兴趣 -
static string test;
public void Init(HttpApplication application)
{
application.BeginRequest +=(new EventHandler(this.Application_BeginRequest));
test = "hi";
application.EndRequest +=(new EventHandler(this.Application_EndRequest));
}
private void Application_BeginRequest(Object source,EventArgs e)
{
{
HttpApplication application = (HttpApplication)source ;
HttpContext context = application.Context;
context.Response.Write(test);
}
}