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





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






3、處理該事件,如:





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




5、在 Web.config 中注冊該模塊。





在原來(lái)要處理application.BeginRequest事件(發(fā)出信號表示新的請求時(shí)觸發(fā)),一般都寫(xiě)在 Global.asax 里的Application_BeginRequest中,原來(lái)程序中BeginRequest事件中的處理并不多,代碼量也很少,把BeginRequest事件的處理的代碼都放到Global.asax中也沒(méi)有什么問(wèn)題??墒窃贒NN中BeginRequest要處理的事件很多,還可能有擴充的需求。而且將不同功能的事件處理,寫(xiě)到不同HttpModule中也能夠使代碼結構更加清晰。
但是如果有多個(gè)HttpModule都包括application.BeginRequest那么程序的執行先后順序又是怎樣的呢?是不是先執行Global.asax 里的,然后按照Web.config中的順序來(lái)呢?關(guān)于這一點(diǎn)還沒(méi)有找到答案,希望知道的人能告知一聲,謝謝!使用HttpModule還有什么更多的好處呢?也希望大家能指出,再次謝謝!

