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

推荐订阅源

Google Online Security Blog
Google Online Security Blog
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
Jina AI
Jina AI
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美
V
V2EX
雷峰网
雷峰网
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog
F
Full Disclosure
Y
Y Combinator Blog
V
V2EX - 技术
Attack and Defense Labs
Attack and Defense Labs
S
Security @ Cisco Blogs
Schneier on Security
Schneier on Security
Microsoft Azure Blog
Microsoft Azure Blog
SecWiki News
SecWiki News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The GitHub Blog
The GitHub Blog
量子位
PCI Perspectives
PCI Perspectives
S
Secure Thoughts
D
Darknet – Hacking Tools, Hacker News & Cyber Security
AWS News Blog
AWS News Blog
Blog — PlanetScale
Blog — PlanetScale
爱范儿
爱范儿
K
Kaspersky official blog
B
Blog
A
Arctic Wolf
Hacker News: Ask HN
Hacker News: Ask HN
L
LangChain Blog
T
Tor Project blog
P
Privacy & Cybersecurity Law Blog
Recent Announcements
Recent Announcements
宝玉的分享
宝玉的分享
The Register - Security
The Register - Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
Lohrmann on Cybersecurity
D
Docker
A
About on SuperTechFans
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
The Last Watchdog
The Last Watchdog
S
Security Affairs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy International News Feed
Simon Willison's Weblog
Simon Willison's Weblog

博客园 - steventong

JAVA電子書下載 實用的網站 Eclipse熱鍵 在Tomcat中安装JSTL 對象的序列化和反序列化 开发宝典:程序开发新手入门之Jave ME 15+ Free Visual Studio Add-Ins Linguatec Personal Translator v2008 Professional English-Chinese xmlhttprequest 中文參考 內存調試技巧 AJAX列表 9月2日照片 在ASP.NET中實現AJAX Atlas Framework 快速上手體驗 微軟 ASP.NET 2.0 的 AJAX 利劍 ~ Atlas Framework What is iBATIS? --SQL MAP [轉] ATF -- eclipse的AJAX插件安装指南 [轉]探索 Eclipse 的 Ajax Toolkit Framework SAJAX FOR PHP
使用HTTP模块扩展 ASP.NET 处理
steventong · 2007-09-03 · via 博客园 - steventong

HTTP 模塊是一個通過實現實現 IHttpModule 接口和處理事件,在每次針對應用程序發出請求時調用的程序集。HTTP 模塊作為 ASP.NET 請求管線的一部分調用,能夠在整個請求過程中訪問生命週期事件。因此,HTTP 模塊使我們有機會檢查傳入和傳出的請求,並根據該請求採取操作。甚至我們可以通過實現HTTP模塊來參與ASP.NET運行的管理,例如,ASP.NET 提供了 SessionStateModule 來向應用程序提供會話狀態服務。

    好了,在使用HTTP模塊之前,先讓我們回顧一下一次請求的生命週期事件:

    在這裡特別提到一點,HTTP 模塊不同於 HTTP 處理程序。對於所有的請求和響應都可調用 HTTP 模塊,而 HTTP 處理程序僅在響應特定的請求時才運行。

    HTTP 模塊典型的用法包括:

l  安全性。因為您可以檢查傳入的請求,所以 HTTP 模塊可以在請求頁、XML Web services 或調用處理程序之前執行自定義的身份驗證或其他安全檢查。

l  統計信息和日誌記錄。因為 HTTP 模塊是在每次請求時調用的,所以,您可以將請求統計信息和日誌記錄信息收集到一個集中的模塊中,而不是收集到各頁中。

l  自定義的頁眉或頁腳。因為您可以修改出站響應,所以可以在每一個頁面或 XML Web services 響應中注入內容,如自定義的標頭信息。

    ASP.NET HTTP 模塊針對所有的請求運行,這與 ISAPI 篩選器類似。但是它們是用托管代碼編寫的,而且可以與 ASP.NET 應用程序的生命週期完全集成。編寫 ASP.NET    HttpModule 的一般過程為:

l  實現 IHttpModule 接口。

l  處理 Init 方法並為所需事件進行註冊。

l  處理該事件。

l  如果必須進行清理,還可根據需要實現 Dispose 方法。

l  Web.config 中註冊該模塊。

    下面,咱們通過一個例子體會一下Http模塊的強大。該例子實現在每個頁面中添加頁頭和頁腳,效果圖如下:

實現步驟

1.  App_Code 目錄中,創建一個名為 HelloWorldModule.cs的類文件。如果網站還沒有 App_Code 文件夾,請在該站點的根目錄下創建這樣的一個文件夾。

2.  類文件全部代碼如下:

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

/// <summary>

/// 簡單的HTTP模塊例子,實現自動添加頁頭和頁腳

/// </summary>

public class HelloWorldModule : IHttpModule

{

    /// <summary>

    /// 初始化,綁定事件

    /// </summary>

    /// <param name="application"></param>

    public void Init(HttpApplication application)

    {

        application.BeginRequest += (new EventHandler(this.Application_BeginRequest));

        application.EndRequest += (new EventHandler(this.Application_EndRequest));

    }

    /// <summary>

    /// 請求開始時,頁面添加頁頭

    /// </summary>

    /// <param name="source"></param>

    /// <param name="e"></param>

    private void Application_BeginRequest(Object source, EventArgs e)

    {

        HttpApplication application = (HttpApplication)source;

        HttpContext context = application.Context;

        context.Response.Write("<h1><font color=red>HTTP模塊添加的題頭</font></h1><hr>");

    }

    /// <summary>

    /// 請求結束時,添加頁腳

    /// </summary>

    /// <param name="source"></param>

    /// <param name="e"></param>

    private void Application_EndRequest(Object source, EventArgs e)

    {

        HttpApplication application = (HttpApplication)source;

        HttpContext context = application.Context;

        context.Response.Write("<hr><h1><font color=red>HTTP模塊添加的頁腳</font></h1>");

    }

}

3.  Web.config 文件中註冊該模塊

    <system.web>

    <httpModules>

        <add name="HelloWorldModule" type="HelloWorldModule"/>

    </httpModules>

</system.web>

4.  測試自定義 HTTP 模塊

單獨建立一頁,在頁面中輸入「頁面正文」,模擬頁面內容。運行,看到了吧?

另外舉一個常用例子,就是登錄驗證的問題,如果用戶沒有登錄或者沒有權限,就特別處理,比如跳轉到錯誤頁面或者登錄頁面。

實現步驟

1.  App_Code 目錄中,創建一個名為 LoginModule.cs的類文件。如果網站還沒有 App_Code 文件夾,請在該站點的根目錄下創建這樣的一個文件夾。

2.  類文件全部代碼如下:

為了節省篇幅,登錄與權限驗證只是用了null判斷表示一下。

public void Init(HttpApplication application)

    {

        application.AcquireRequestState += (new EventHandler(this.Application_AcquireRequestState));

    }

    private void Application_AcquireRequestState(Object source, EventArgs e)

    {

        HttpApplication Application = (HttpApplication)source;

        if (Application.Context.Session["User"] == null)

        {

            Application.Context.Server.Transfer("ErrorPage.aspx");//引導到錯誤處理的頁面

        }       

    }

3.  Web.config 文件中註冊該模塊

    <system.web>

    <httpModules>

        <add name="HelloWorldModule" type="HelloWorldModule"/>

        <add name="LoginModule" type=" LoginModule "/>

    </httpModules>

</system.web>

4.  再次測試一下吧。

非常簡單的例子,但是已經能說明HTTP模塊的基本使用了。

參考文獻

Microsoft .NET Framework SDK v2.0

MSDN

鳴謝:劉琦及其各位分享技術的高手

出自 51CTO.COM博客