IHttpModule介面
IHttpModule向實現類提供模組初始化和處置事件。
IHttpModule包含兩個方法:
public void Init(HttpApplication context);
public void Dispose();
Init():這個方法接受一個HttpApplication物件,HttpApplication代表了當前的應用程式,我們需要在這個方法內註冊
HttpApplication物件暴露給客戶端的事件。可見,這個方法僅僅是用來對事件進行註冊,而實際的事件處理程式,需要我們另外寫方法。
整個過程很好理解:
1. 當站點第一個資源被訪問的時候,Asp.Net會建立HttpApplication類的例項,它代表著站點應用程式,同時會建立所有在Web.Config中註冊過的Module例項。
2. 在建立Module例項的時候會呼叫Modul的Init()方法。
3. 在Init()方法內,對想要作出響應的HttpApplication暴露出的事件進行註冊。(僅僅進行方法的簡單註冊,實際的方法需要另寫)。
4. HttpApplication在其應用程式週期中觸發各類事件。
5. 觸發事件的時候呼叫Module在其Init()方法中註冊過的方法。
Dispose():它可以在進行垃圾回收之前進行一些清理工作。
public class
ModuleDemo:IHttpModule
{
public void Init(HttpApplication context) {
// 註冊HttpApplication應用程式 BeginRequest 事件
// 也可以是其他任何HttpApplication暴露出的事件
context.BeginRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest(object sender, EventArgs e) {
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
// 做些實際的工作,HttpContext物件都獲得了,剩下的基本可以自由發揮了
}
public void Dispose() {
}
}
通過Http Module向Http請求輸出流中寫入文字
本例中,我們僅用BeginRequest事件和 EndRequest 事件對 Http Module 的使用作以說明。我們通過這個範例,瞭解 Http Module 基本的使用方法。
首先,請建立一個新的站點,在App_Code目錄中新增類檔案: ModuleDemo.cs:
public class
ModuleDemo:IHttpModule
{
// Init方法僅用於給期望的事件註冊方法
public void Init(HttpApplication context) {
context.BeginRequest += new EventHandler(context_BeginRequest);
context.EndRequest += new EventHandler(context_EndRequest);
}
// 處理BeginRequest 事件的實際程式碼
void context_BeginRequest(object sender, EventArgs e) {
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
context.Response.Write("<h1 style='color:#00f'>來自HttpModule 的處理,請求到達</h1><hr>");
}
// 處理EndRequest 事件的實際程式碼
void context_EndRequest(object sender, EventArgs e) {
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
context.Response.Write("<hr><h1 style='color:#f00'>來自HttpModule的處理,請求結束</h1>");
}
public void Dispose() {
}
}
上面的程式碼很簡單,它註冊了 HttpApplication例項的 BeginRequest 事件 和 EndRequest事件,事件處理方法的作用僅僅是在http請求開始和結束的時候,給http請求的輸入流中分別寫入不同的內容。
接下來在 Web.config 的 System.web 結點中寫入以下內容:
<system.web>
<httpModules>
<add name="MyModule" type="ModuleDemo" />
</httpModules>
</system.web>
在這冊我們自己的http module 時,假設類名為ModuleDemo,位於myNameSpace名稱空間下,程式集名稱為myDll,我們只需將myDll.dll拷貝到Bin目錄下,並在站點的 web.config 檔案 system.web 結點下建立 httpModules 結點:
<system.web>
<httpModules>
<add name="CustomModuleName" type="myNameSpace.ModuleDemo,
myDll"/>
</httpModules>
</system.web>
type屬性由分號“,”分為兩部分,前面是名稱空間及類名,也就是型別名;後面是程式集名。如果我們將程式碼建立在App_Code目錄中,則不需要再指定程式集名。
name屬性由我們自己命名,不一定與類名相同,此處我將它命名為“CustomModuleName”。我們可以通過應用程式(HttpApplication) 的Modules屬性獲取HttpModuleCollection集合,然後通過name屬性,進一步獲取HttpModule物件。
通過name屬性,我們還可以在global.asax中檔案中編寫自定義HttpModule暴露出的事件的處理程式,它採用的格式是:void ModuleName_EventName(object sender, EventArgs e)。
相關文章
- IHttpModule與IHttpHandler的區別(續)HTTP
- IHttpModule和IHttpHandler 應用筆記HTTP筆記
- asp.net 利用IHttpModule和IRequiresSessionState控制入口登入開發錯誤解決辦法ASP.NETHTTPUISession
- 介面卡模式(類介面卡,物件介面卡,介面介面卡)模式物件
- API介面------外部介面和內部介面區別API
- java 介面,介面的特性,介面實現多型,面向介面程式設計Java多型程式設計
- Lock介面之Condition介面
- 淘寶商品詳情介面(商品銷量介面,商品列表介面,商品影片介面)程式碼展示
- 介面
- 『居善地』介面測試 — 2、介面和介面文件概念
- 介面卡模式(類介面卡 物件介面卡)模式物件
- 什麼是介面?如何定義介面?如何實現介面?
- 類與介面(三)java中的介面與巢狀介面Java巢狀
- 介面測試--介面文件規範
- Java 自學 - 介面與繼承 介面Java繼承
- 呼叫後端介面 / 介面適配後端
- BeanNameAware介面和BeanFactoryAware介面(轉)Bean
- 1688商品詳情資料介面、商品列表介面,商品屬性介面、商品優惠券介面
- 開啟系統介面/軟體介面
- TS 介面
- Serializable介面
- interface/介面
- 2.4 介面
- Collection介面
- TypeScript 介面TypeScript
- go介面Go
- RandomAccess介面randomMac
- 介面1
- MutationObserver 介面Server
- java介面Java
- webservice介面Web
- PHP 介面PHP
- 介面限流
- java 介面Java
- Iterable介面
- 容器介面
- StormBolt介面ORM
- IAsyncResult介面