请单击以进行评分并提供反馈
MSDN
MSDN Library
网站
了解更多
 如何:创建自定义 HTTP 模块
此页面仅适用于
Microsoft Visual Studio 2005/.NET Framework 2.0

同时提供下列产品的其他版本:
ASP.NET
如何:创建自定义 HTTP 模块

本主题中描述的自定义 HTTP 模块阐释了 HTTP 模块的基本功能。在响应下面两个事件时调用该模块:BeginRequest 事件和 EndRequest 事件。这使该模块可以在处理页请求之前和之后运行。在这种情况下,该模块向请求的 ASP.NET 网页的任一 HTTP 请求开头处添加一条消息,并在处理请求后添加另一条消息。

Note注意

BeginRequestEndRequest 事件只是在处理页期间发生的两个事件。有关在处理页期间引发的事件的更多信息,请参见 ASP.NET 网页中的服务器事件处理

每个事件处理程序都编写为模块的私有方法。在引发已注册事件时,ASP.NET 调用该模块中适当的处理程序方法,该方法将信息写入 ASP.NET 网页中。

创建自定义 HTTP 模块类

  1. 如果网站还没有 App_Code 文件夹,请在该站点的根目录下创建这样的一个文件夹。

  2. 在 App_Code 目录中,创建一个名为 HelloWorldModule.vb(对于 Visual Basic)或名为 HelloWorldModule.cs(对于 C#)的类文件。

Note注意

或者,可以将 HelloWorldModule 类编译到一个库中,并将得到的 .dll 文件放在 Web 应用程序的 Bin 目录中。

  1. 将以下代码添加到该类文件中:

    Visual Basic
    Imports Microsoft.VisualBasic
    
    Public Class HelloWorldModule
        Implements IHttpModule
    
        Public ReadOnly Property ModuleName() As [String]
            Get
                Return "HelloWorldModule"
            End Get
        End Property
    
        ' In the Init function, register for HttpApplication 
        ' events by adding your handlers.
        Public Sub Init(ByVal application As HttpApplication) _
                Implements IHttpModule.Init
            AddHandler application.BeginRequest, _
                AddressOf Me.Application_BeginRequest
            AddHandler application.EndRequest, _
                AddressOf Me.Application_EndRequest
        End Sub
    
        Private Sub Application_BeginRequest(ByVal source As Object, _
                ByVal e As EventArgs)
        ' Create HttpApplication and HttpContext objects to access
        ' request and response properties.
            Dim application As HttpApplication = CType(source, _
                HttpApplication)
            Dim context As HttpContext = application.Context
            context.Response.Write _
               ("<h1><font color=red>HelloWorldModule: " & _
                    "Beginning of Request</font></h1><hr>")
        End Sub
    
        Private Sub Application_EndRequest(ByVal source As Object, _
                ByVal e As EventArgs)
            Dim application As HttpApplication = CType(source, _
                HttpApplication)
            Dim context As HttpContext = application.Context
            context.Response.Write _
                ("<hr><h1><font color=red>HelloWorldModule: " & _
                    "End of Request</font></h1>")
        End Sub
    
        Public Sub Dispose() Implements IHttpModule.Dispose
        End Sub
    End Class

    C#
    public class HelloWorldModule : IHttpModule
    {
        public HelloWorldModule()
        {
        }
    
        public String ModuleName
        {
            get { return "HelloWorldModule"; }
        }
    
        // In the Init function, register for HttpApplication 
        // events by adding your handlers.
        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)
        {
        // Create HttpApplication and HttpContext objects to access
        // request and response properties.
            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.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 模块介绍

请参见

社区内容   什么是社区内容?
添加新内容 RSS  批注
Processing
© 2009 Microsoft Corporation 版权所有。 保留所有权利 | 商标 | 隐私权声明
Page view tracker