IHttpModule與IHttpHandler的區別(續)

CodeAgriculture發表於2013-04-01
IHttpModuleIHttpHandler的區別整理
1.先後次序.IHttpModule,IHttpHandler. :Module要看你響應了哪個事件,一些事件是在Handler之前執行的,一些是在Handler之後執行的
2.對請求的處理上:
IHttpModule是屬於大小通吃型別,無論客戶端請求的是什麼檔案,都會呼叫到它;例如aspx,rar,html的請求.
IHttpHandler則屬於挑食型別,只有ASP.net註冊過的檔案型別(例如aspx,asmx等等)才會輪到呼叫它.
3.IHttpHandler按照你的請求 生成響應的內容,IHttpModule對請求進行預處理,如驗證、修改、過濾等等,同時也可以對響應進行處理
HttpModule主要功能是對Application的各個事件進行擷取,在這些事件中完成自己的處理。其實如果自己開發一些專案,直接在 Global.asax中處理已經足夠了。如果是開發一個Framework或者是某些方面的元件,需要在事件中新增處理,開發自定義的 HttpModule,可以避免使用Framework或者元件時,還得手工在Global.asax中新增程式碼。 目前想到的開發自定義HttpModule的用途,有全域性的身份/許可權驗證、自定義網站訪問/操作日誌的記錄、處於管理/除錯等目的對站點進行監控追蹤 等。當然,如果是結合自定義的HttpHandler進行Framework的開發,HttpModule可以用於其它的一些特殊的處理。

HttpHandler的使用,比較典型的有.NetWeb MVC開源專案MaverickMaverick使用一個Dispatcher類對所有的Http Request進行擷取,他以.m作為字尾名向Web伺服器提交請求,在Dispatcher中,將.m的字尾去掉,提取Command Name,然後以這個command name從配置檔案中載入處理的flow,形成一個chain,依次對chain上的各個commandview進行處理,對各個command view的處理結果可能會在chain中選擇不同的處理分支,每個處理的Step中將處理結果的HTML寫入Response的快取中進行輸出。

Asp.Net HttpHandler實現URL重寫的

我們經常看到很多網站訪問文章的時候才用的是***.html 或***.shtml (如本blog的日誌訪問效果),其時這寫檔案在伺服器上不存在的,那為什麼會出現這樣的效果呢,是因為Web伺服器上對URL執行了重寫,把訪問的 URL根據特定的格式重寫成內部訪問頁面來實現的,它的好處是便於使用者理解,同時搜尋引擎也能更好地收入你的網站,當然其它的好處也很多,這裡不做一一介 紹了。

本文所講的是使用Asp.Net中的HttpHandler實現URL重寫的,它所實現的原理請看這裡,本程式可以處理任何Url,因為我在程式中使用了URL過慮,只有訪問檔名是數字的才進行處理,並指在內部執行一個新的頁面,並輸出資料,程式碼如下:

public void ProcessRequest(HttpContext Context)

{

try {

 //申明Request

HttpRequest Request = Context.Request;

//取來路Url的絕對路徑

string Url = Request.Url.AbsolutePath;

//取訪問的Web檔案的開始字元間隔數

int RegStart = Url.LastIndexOf("/") + 1;

//申明一個確定Web檔名是否全是數字

Regex Reg = new Regex(@"/d+");

//用正規表示式進行匹配

if (Reg.IsMatch(Url, RegStart))

{

// 如果web檔名是數字,則判定是查詢相關文章,

執行指定頁面 Context.Server.Execute

("~/PermaLink.aspx?id=" + Reg.Match(Url, RegStart).Value);

}

}

catch

{

  Context.Response.Redirect(Context.Request.Url.ToString());

}

}

當然你首先要做的是先建一個類,並繼承自IHttpHandler,然後把這段程式碼拷入,並編譯。在Web專案中若要使用此功能,需要在web.config裡面加上如下語句:

HttpHandle.UrlRewrite" />

同時,還要在IIS中對Web專案進行配置,在Web專案的屬性中,在主目錄選項卡里,把執行許可權改為"指令碼和可執行檔案",然後開啟配置,在應用程式擴充套件里加上需重寫的檔案格式的擴充套件

因為web.config作為一個XML檔案是大小寫敏感的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28699126/viewspace-757538/,如需轉載,請註明出處,否則將追究法律責任。

相關文章