惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
Last Week in AI
Last Week in AI
腾讯CDC
The Cloudflare Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
MyScale Blog
MyScale Blog
博客园 - Franky
MongoDB | Blog
MongoDB | Blog
I
InfoQ
雷峰网
雷峰网
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
Y
Y Combinator Blog
H
Help Net Security
T
Tailwind CSS Blog
美团技术团队
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
云风的 BLOG
云风的 BLOG
Google DeepMind News
Google DeepMind News
P
Proofpoint News Feed

博客园 - Laeb

ASP.NET Web 页面语法概览 ASP.NET Web 页面中的新事物 渐增的许可 介绍 ASP.NET Web 页面 管理工具 ASP.NET Web 页面概览 检测何时需要更改安全策略 安全策略管理的概览 System.Net 类的最佳习惯 异常处理的最佳习惯 面向世界应用程序开发的最佳习惯 使用 ASP.NET 所创建的 XML Web 服务的设计指南 为并发执行而创建应用程序与组件的指南 ASP.NET 控件与可访问 ASP.NET 中的可访问支持 HTTP 模块介绍 实践:创建 HTTP 处理器工厂 实践:注册 HTTP 处理器 实践:创建同步 HTTP 处理器
实践:创建自定义 HTTP 模块
Laeb · 2007-03-21 · via 博客园 - Laeb

在本文中被描述的自定义 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 模块]。