[DNN學(xué)習(xí)所得]HttpModule到底是個(gè)什么東西
Posted on 2005-05-14 15:47 二十四畫生 閱讀(3769) 評(píng)論(7) 編輯 收藏 所屬分類: .NET文章 、DotNetNuke(DNN) 在學(xué)習(xí)DNN到UrlRewriteModule類時(shí)(UrlRewriteModule.vb中),發(fā)現(xiàn)這個(gè)類是由IHttpModule接口繼承來的。一查MSDN知道了UrlRewriteModule原來是個(gè)HttpModule。那么HttpModule到底是個(gè)什么東西?有什么用?用了有什么好處?
HttpModule這個(gè)東西我原來從來沒有用到過(可見自己的知識(shí)面和.net的龐大功能有多么大的差別)。這次學(xué)習(xí)DNN讓我有機(jī)會(huì)見到HttpModule,不能放過這個(gè)知識(shí)點(diǎn)的空缺。在查詢了相關(guān)的資料以后終于算是對(duì)HttpModule有了初步的了解。
HttpModule 是實(shí)現(xiàn) IHttpModule 接口和處理事件的程序集。ASP.NET 包含一組可由應(yīng)用程序使用的 HttpModule 模塊。例如,ASP.NET 提供了 SessionStateModule 來向應(yīng)用程序提供會(huì)話狀態(tài)服務(wù)??梢詣?chuàng)建自定義 HttpModule 以響應(yīng) ASP.NET 事件或用戶事件。
編寫 HttpModule 的一般過程為:
1、實(shí)現(xiàn) IHttpModule 接口,如:





2、處理 Init 方法并為所需事件進(jìn)行注冊(cè),如:






3、處理該事件,如:





4、如果必須進(jìn)行清理,還可根據(jù)需要實(shí)現(xiàn) Dispose 方法。




5、在 Web.config 中注冊(cè)該模塊。





在原來要處理application.BeginRequest事件(發(fā)出信號(hào)表示新的請(qǐng)求時(shí)觸發(fā)),一般都寫在 Global.asax 里的Application_BeginRequest中,原來程序中BeginRequest事件中的處理并不多,代碼量也很少,把BeginRequest事件的處理的代碼都放到Global.asax中也沒有什么問題。可是在DNN中BeginRequest要處理的事件很多,還可能有擴(kuò)充的需求。而且將不同功能的事件處理,寫到不同HttpModule中也能夠使代碼結(jié)構(gòu)更加清晰。
但是如果有多個(gè)HttpModule都包括application.BeginRequest那么程序的執(zhí)行先后順序又是怎樣的呢?是不是先執(zhí)行Global.asax 里的,然后按照Web.config中的順序來呢?關(guān)于這一點(diǎn)還沒有找到答案,希望知道的人能告知一聲,謝謝!使用HttpModule還有什么更多的好處呢?也希望大家能指出,再次謝謝!
相關(guān)知識(shí):
http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpconhandlingpublicevents.asp