本主题中描述的自定义 HTTP 模块阐释了 HTTP 模块的基本功能。在响应下面两个事件时调用该模块:BeginRequest 事件和 EndRequest 事件。这使该模块能够在处理页请求以前和以后运行。在这种状况下,该模块向请求的 ASP.NET 网页的任一 HTTP 请求开头处添加一条消息,并在处理请求后添加另外一条消息。web
注意 |
---|
BeginRequest 和 EndRequest 事件只是在处理页期间发生的两个事件。有关在处理页期间引起的事件的更多信息,请参见 ASP.NET 网页中的服务器事件处理。浏览器 |
每一个事件处理程序都编写为模块的私有方法。在引起已注册事件时,ASP.NET 调用该模块中适当的处理程序方法,该方法将信息写入 ASP.NET 网页中。服务器
若是网站尚未 App_Code 文件夹,请在该站点的根目录下建立这样的一个文件夹。app
在 App_Code 目录中,建立一个名为 HelloWorldModule.vb(对于 Visual Basic)或名为 HelloWorldModule.cs(对于 C#)的类文件。测试
注意 |
---|
或者,能够将 HelloWorldModule 类编译到一个库中,并将获得的 .dll 文件放在 Web 应用程序的 Bin 目录中。网站 |
将如下代码添加到该类文件中:this
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() { } }
在建立完 HelloWorldModule 类后,能够经过在 Web.config 文件中建立一项来注册该模块。url
若是网站尚未 Web.config 文件,请在该站点的根目录下建立一个这样的文件。spa
将下面突出显示的代码添加到该 Web.config 文件中:code
<configuration> <system.web> <httpModules> <add name="HelloWorldModule" type="HelloWorldModule"/> </httpModules> </system.web> </configuration>
这段代码用 HelloWorldModule 的类名和模块名注册该模块。
建立并注册完自定义 HTTP 模块后,能够对它进行测试。
在应用程序中建立一个 Default.aspx 页。
在浏览器中请求该 Default.aspx 页。
HTTP 模块会将一个字符串追加到响应的开头和结尾。在请求扩展名指定为 ASP.NET 类型的文件时,该模块将会自动运行。