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

推荐订阅源

D
Docker
Simon Willison's Weblog
Simon Willison's Weblog
H
Help Net Security
F
Fortinet All Blogs
H
Heimdal Security Blog
S
Schneier on Security
L
LangChain Blog
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
NISL@THU
NISL@THU
P
Palo Alto Networks Blog
J
Java Code Geeks
博客园 - 【当耐特】
The Last Watchdog
The Last Watchdog
W
WeLiveSecurity
www.infosecurity-magazine.com
www.infosecurity-magazine.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Vulnerabilities – Threatpost
I
InfoQ
Recorded Future
Recorded Future
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
CERT Recently Published Vulnerability Notes
T
Tenable Blog
腾讯CDC
C
Check Point Blog
量子位
M
MIT News - Artificial intelligence
GbyAI
GbyAI
罗磊的独立博客
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
B
Blog
小众软件
小众软件
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
CXSECURITY Database RSS Feed - CXSecurity.com
Stack Overflow Blog
Stack Overflow Blog
P
Proofpoint News Feed
P
Privacy & Cybersecurity Law Blog
V2EX - 技术
V2EX - 技术
T
Threatpost
Engineering at Meta
Engineering at Meta
Attack and Defense Labs
Attack and Defense Labs
T
Tailwind CSS Blog
S
Securelist
The Cloudflare Blog
博客园 - 叶小钗
L
LINUX DO - 最新话题
T
Troy Hunt's Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
爱范儿
爱范儿

博客园 - 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 模块]。