特殊的HttpApplication事件处理
Posted 分而治之
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了特殊的HttpApplication事件处理相关的知识,希望对你有一定的参考价值。
在global.asax中,针对HttpApplication的事件处理,可以通过定义特殊命名的方法来实现。首先,这些方法必须符合System.EventHandler,因为所有的HttpApplication管道事件都使用这个委托定义。第二,方法的作用域必须是public。第三,方法的命名格式必须如下:Application_注册的事件名称。按照这种命名方法定义在global.asax中的方法将被自动注册到对应的事件中。
例如,希望在global.asax中注册PostAuthenticateRequest事件处理,那么在global.asax中应该定义一个如下的方法:
void Application_PostAuthenticateRequest(object sender, EventArgs e) { Response.Write("验证通过事件!"); }
在Asp.net中,有些事件甚至只能通过global.asax来完成处理。
1、Start事件
Instances of the HttpApplication class are created in the ASP.NET infrastructure, not by the user directly. One instance of the HttpApplication class is used to process many requests in its lifetime. However, it can process only one request at a time
这个不是HttpApplication处理管道中的事件,当网站启动后,第一次请求到达网站之后,Asp.net网站将首先触发一次这个事件,而且在网站的整个生命周期中,也仅仅触发一次。由System.Web.HttpApplicationFactory对象触发,所以,也不能通过HttpApplication对象来获取相关的请求参数。在这个事件处罚的时候,第一次请求的上下文对象HttpContext也已经创建,所以,可以通过HttpContext.Current获取第一次的上下文请求对象,然后通过这个上下文对象来获取相关信息。
由于这个事件在网站第一次请求的时候触发,所以非常适合针对网站全局的数据进行初始化工作,在Asp.net MVC中,RouteTablle就是在这个事件中创建的。
2、End事件
当网站应用程序被关闭的时候,将触发这个事件。
3、Error事件
当网站应用程序出现错误,或者处理过程中出现未捕获的异常时,HttpApplication将抛出这个事件 。
4、Session的Start事件
当Asp.net每次创建了一个新的Session后,换句话说,创建了一个新的SessionID之后,就会触发Session的Start事件。需要注意到,在Asp.net中,支持会话的HttpModule在配置文件中注册的name就是Session。
5、Session的End事件
当一个Session过期之后,或者通过调用Abandon方法被丢弃之后,将会触发Session的End事件。这个事件的事件源实际上是SessionStateModule,而不是HttpApplication。需要注意的是,关闭浏览器不会导致Session的End事件。而且,如果Session的管理模式是StateServer或者SQLServer的话,将不会触发这个事件。
6、HttpModule的事件注册
从Session的处理可以看出,对于注册到网站中的HttpModule,如果这些Module也会抛出事件,而我们希望能够处理这些HttpModule事件的时候,可以在global.asax通过定义如下名称形式的方法来处理HttpModule的事件。
参考链接:http://www.cnblogs.com/kissdodog/p/3527922.html
以上是关于特殊的HttpApplication事件处理的主要内容,如果未能解决你的问题,请参考以下文章
为啥事件处理程序只能在 IHttpModule 初始化期间绑定到 HttpApplication 事件?
HttpApplication处理对象与HttpModule处理模块