使用web.config中的httpModules

    之前在补习基础知识的时候写了两篇文章,分别简要记录了asp.net配置文件(web.config)中httpHandlersconfigSections的作用,既然是补习,那就尽量写成一个系列那样子,这篇文章主要讲述另外一个也是比较底层的配置,是和httpHandlers在web.config中处于同一级的配置,叫httpModules。     通过配置http模块、实现模块,我们可以为HttpApplication添加各种事件,这里可能会涉及到asp.net对Http请求处理的流程相关知识,但就不做介绍了,写起来的话已经是很长的文章了。下面简要介绍httpModules的配置和使用。

    配置和实现httpModules

    1、首先我们需要在Web.config中配置节点,和httpHandlers的配置有某些相似的地方,如下:

xml代码
1
2
3
4
5
6
7
<configuration>
    <system.web>
      <httpModules>
        <add name="YourHttpModule" type="HttpModuleTest.YourHttpModule,HttpModuleTest"/>
      </httpModules>
    </system.web>
</configuration>

    上面配置了一个HttpModuler,add节点指明了模块名,type表示由哪个类实现(“类名,程序集名”)

    2、可以猜想到,接下来要实现HttpModuleTest.YourHttpModule类,这个类的特点是它继承IHttpModule接口,是不是觉得和httpHandler的实现很相似呢?先看下实现的代码在做说明:

c#代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
namespace HttpModuleTest
{
    public class YourHttpModule : IHttpModule
    {
        /// <summary>
        /// 创建HttpModel对象的时候会调用这个方法
        /// </summary>
        /// <param name="context"></param>
        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler((object sender, EventArgs e) =>
            {
                // 客户端一旦开始发出请求就进这里
                HttpApplication application = sender as HttpApplication;
                HttpResponse response = application.Response;
                response.Write("YourHttpModule : BeginRequest </br>");
            });
            context.EndRequest += new EventHandler((object sender, EventArgs e) =>
            {
                // 处理完客户端后就进这里
                HttpApplication application = sender as HttpApplication;
                HttpResponse response = application.Response;
                response.Write("YourHttpModule : EndRequest </br>");
            });
        }
        public void Dispose() { }
    }
}

    继承了IHttpMdule我们需要实现两个方法,Init和Display方法,Dispose方法就不介绍了,主要就是在回收之前做点什么东西。。。在Init方法中我们可以从参数中得到当前的HttpApplication对象,通过这个对象的引用我们可以给当前应用程序周期中的各个事件添加处理方法,上面我们分别对客户端发起请求的开始和结束添加了事件处理方法,各自在页面上打出一行字。

    3、测试,创建一个aspx页面,直接运行打开页面,可以发现页面打先后出了两行字,就是上面那两行了。要知道我们的配置是处于应用程序级别的,也就是说,你再创建一个页面的话,效果一样!都是如下:
    


    注意一下,上面我在页面的Page_Load事件中也输出了点内容,并且拖了几个服务器端控件在页面上(显示的顺序是个关键哇!)。如果创建多一个httpModule的话是什么情况呢?这个自己试试会有比较深的记忆,这里提供我自己测试的时候写的一点代码,里面就用了两个httpModule,如果有需要的话请点击下载

posted @ 2012-07-13 11:56  serafin  阅读(1025)  评论(0编辑  收藏  举报