如何在ASP.NET模块中处理应用程序启动事件

时间:2010-06-25 15:00:31

标签: c# asp.net httpmodule

我正在编写一个asp.net HTTP模块,它需要从本地文件(比如存储在应用程序根目录中的config.xml)读取配置数据一次然后根据配置执行一些处理来电请求。

由于Asp.NET模块中没有可用的Application_Start / Application_init挂钩,因此处理场景的最佳方法是什么。我试图避免每次请求时读取配置文件。理想情况下,我想在应用程序启动时读取配置文件。

我只需要在http模块中对此进行编码,并且不想使用Global.asax

5 个答案:

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


        }