IHttpModule.Init 方法在MSDN上解释为HttpModule使用 Init 方法向特定事件注册事件处理方法。从我所看到的资料上也是这样解释的:当HttpApplication加载某个HttpModule时,会调用IHttpModule.Init()并利用这个机会来注册它所关心的事件。那么IHttpModule.Init 方法应该是在Application启动时执行初始化操作,并且只需要执行一次。 所以我们的一些初始化的东西也可以放在这里面。
问题因此而产生,IHttpModule.Init 方法并不是只执行一次。当使用框架页或者在同一个页面快速连贯地提交多次时,IHttpModule.Init 方法又开始执行了。到目前为止我还不知道是什么原因造成,希望高人指点一二。
我自己做了一个测试例子:从这里下载测试代码
解决方案中包含两个项目,一个是HttpModule,一个是普通的WebApplication。
HttpModule.Init 方法中使用如下语句
HttpContext.Current.Server.MapPath("web.config")
实现了一个查找web.config文件的功能。如果从根目录的Defalut.aspx页面启动,那么将得到正确的web.config路径。当跳转到子目录下的页面时,按理说HttpModule.Init 方法不可能有执行的机会。但是在子目录的页面上操作时,HttpModule.Init 方法再一次执行了。这时就会得到一个错误的web.config路径。