ASP.NET Lab

The Best Web, The Best Future

博客园 首页 新随笔 订阅 管理

在本文中被描述的自定义 HTTP 模块说明了一个 HTTP 模块的基本功能。该模块被调用来回应两个事件:BeginRequest 事件和 EndRequest 事件。这允许模块在页面请求被处理之前和处理之后能够被运行。在这种情况下,该模块把一条消息添加到了任何 HTTP 请求的已请求 ASP.NET Web 页面之前,并且把其他消息添加到请求被处理之后。

提示:BeginRequest 和 EndRequest 事件是唯一出现在页面处理期间的两个事件。关于处理页面时被引发的事件的更多信息,请参考[ASP.NET Web 页面中的服务器事件处理]。

每个处理器都被编写成该模块的私有方法。当已注册事件被引发的时候,ASP.NET 就在处理器中调用适当的处理器方法,从而把信息写入到 ASP.NET Web 页面。

创建自定义 HTTP 模块类

  1. 如果你的 Web 站点没有 App_Code 目录,就在站点的根目录下创建一个。
  2. 在 App_Code 目录中创建一个名为 HelloWorldModule.vb(Visual Basic)或者 HelloWorldModule.cs(C#)的类文件。

提示:作为选择,你可以把 HelloWorldModule 类编译进一个库并且把结果 .dll 文件存放进 Web 应用程序的 Bin 目录。

  1. 添加下列代码到你的类文件:
    public class HelloWorldModule : IHttpModule
    {
        public HelloWorldModule()
        {
        }
    
        public String ModuleName
        {
            get { return "HelloWorldModule"; }
        }
    
        // 在 Init 方法中,添加你的处理器来注册 HttpApplication 事件。
        public void Init(HttpApplication application)
        {
            application.BeginRequest += 
                (new EventHandler(this.Application_BeginRequest));
            application.EndRequest += 
                (new EventHandler(this.Application_EndRequest));
        }
    
        private void Application_BeginRequest(Object source, 
             EventArgs e)
        {
        // 创建 HttpApplication 和 HttpContext 对象来访问请求属性和回应属性。
            HttpApplication application = (HttpApplication)source;
            HttpContext context = application.Context;
            context.Response.Write("<h1><font color=red>
                HelloWorldModule: Beginning of Request
                </font></h1><hr>");
        }
    
        private void Application_EndRequest(Object source, EventArgs e)
        {
            HttpApplication application = (HttpApplication)source;
            HttpContext context = application.Context;
            context.Response.Write("<hr><h1><font color=red>
                HelloWorldModule: End of Request</font></h1>");
        }
    
        public void Dispose()
        {
        }
    }

注册 HTTP 模块

当你完成 HelloWorldModule 类的创建之后,你就可以在 Web.config 文件中创建一个入口来注册该模块。

在 Web.config 文件中注册模块
  1. 如果你的 Web 站点没有 Web.config 文件,就在站点的根目录下创建一个。
  2. 添加下列代码到 Web.config 文件:
    <configuration>
        <system.web>
            <httpModules>
               <add name="HelloWorldModule" type="HelloWorldModule"/>
            </httpModules>
        </system.web>
    </configuration>

    上述代码会使用 HelloWorldModule 的类名称和模块名称来注册模块。

测试自定义 HTTP 模块

在你创建并且注册自定义 HTTP 模块之后就可以测试了。

测试自定义 HTTP 模块
  1. 在你的应用程序中创建一个 Default.aspx 文件。
  2. 在浏览器中请求该 Default.aspx 页面。

    HTTP 模块把一个字符串添加到了回应的开始与结束部分。该模块将会在任何对于扩展名被指派到 ASP.NET 的文件请求之上得到运行。关于更多信息,请参考[介绍 HTTP 模块]。

posted on 2007-03-21 14:04  Laeb  阅读(357)  评论(0编辑  收藏  举报