IHttpHandler和IHttpModule

一、概述

 .NET Framework提供了一系列的接口和類,允許對Http請求進行自定義編程,而實現這一操作的主要接口,就是IHttpHandler和IHttpModule。所有的Http請求通過HttpHandler處理中心來處理的,用戶發起一個Http請求,.NET Framework調用HttpHandler的ProcessRequest方法對請求進處理,並將處理過後的結果信息附加在Http請求信息流中返回到HtttpModule中。

.NET爲asp.net提供了很多系統默認HttpHandler類,用來適應不同類型的HttpRequest。它根據文件名後綴把不同的請求轉交給不同的處理程序。但是仔細看看就會發現:幾乎一大半的文件都交給aspnet_isapi.dll去處理了。可以在電腦上C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\ 目錄下的web.config 文件下查看系統預定義的HttpHandler處理方式。比如aspx,在web.config中是這樣定義的: 

<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/> 
這就說明遇到aspx的Request請求,asp.net會將其交給System.Web.UI.PageHandlerFactory的HttpHandler類來處理。 

二、IHttpHandler介紹

IHttpHandler:定義ASP.NET爲使用自定義HTTP處理程序同步處理HTTP Web請求而實現的協定。

IHttpHandler接口只有兩個成員:
    IsReusable標識該IHttpHandler實例能否被其他請求使用。
    ProcessRequest是具體的自定義處理HTTP Web請求方法。

三、IHttpModule介紹

IHttpModule:向實現類提供模塊初始化和處置事件。

IHttpHandler接口只有兩個成員:
    void Dispose()處置由實現 System.Web.IHttpModule 的模塊使用的資源(內存除外)。
    void Init(HttpApplication context)初始化模塊,並使其爲處理請求做好準備。參數:context:一個System.Web.HttpApplication,它提供對 ASP.NET 應用程序內所有應用程序對象的公用的方法、屬性和事件的訪問

四、IHttpModule與IHttpHandler的區別

1.執行順序,先IHttpModule,後IHttpHandler,再IHttpModule。

2.對請求的處理不同:

        IHttpModule無論客戶端請求的是什麼文件,都會調用到它;例如aspx,rar,html的請求.
        IHttpHandler只有ASP.net註冊過的文件類型(例如aspx,asmx等等)纔會輪到調用它.

四、IHttpModule與IHttpHandler處理請求流程

當用戶再瀏覽器發起一個http請求,首先會經過HttpModule處理,然後判斷請求的文件類型,把這個請求轉交給aspnet_isapi.dll而aspnet_isapi.dll則會根據文件後綴來決定交給哪一個HttpHandle類來處理,當HttpHandle類內部的ProcessRequest方法處理完畢之後,再反交給HttpModule,由HttpModule返回給客戶端,至此整個Http 請求就被處理完成了。
完整的http請求在asp.net framework中的處理流程:
HttpRequest-->inetinfo.exe->ASPNET_ISAPI.DLL-->Http Pipeline-->ASPNET_WP.EXE-->HttpRuntime-->HttpApplication Factory-->HttpApplication-->HttpModule-->HttpHandler Factory-->HttpHandler-->HttpHandler.ProcessRequest()
如果想在中途截獲一個httpRequest並做些自己的處理,就應該在HttpRuntime運行時內部來做到這一點,確切的說時在HttpHandler這個容器中做到這個的。

五、實例

1.創建自定義IHttpModule類MyModule

2.創建自定義IHttpHandler類MyHandler

3.在web.config中註冊

當http請求爲.dz類型的文件的時候,都會在自定義的MyHandler中處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章