關於IHttpModule的相關知識總結


一、IHttpModule相關概述

using System;
namespace System.Web
{
    public interface IHttpModule
    {
        //   銷毀不再被HttpModule使用的資源
        void Dispose();
        // 初始化一個Module,為捕獲HttpRequest做准備
        void Init(HttpApplication context);
    }
}

 

功能概述:向實現類提供模塊初始化和處置事件.它能夠截獲所有請求,如同windows hook一樣.所以你能夠利用它做很多你想要做的事情.

必然url重寫、大文件上傳、sql注入檢測......

Asp.net會為每個請求分配一個HttpApplication對象.

管道

二、IIS7、IIS6 web.config注冊HttpModule

1)IIS6注冊HttpModule

 <system.web>
    <httpModules>
      <add name="..."  type="MyApplication.RequestDurationLoggerModule, MyApplication"/>
    </httpModules>
  </system.web>

2)IIS7注冊HttpModule

<system.webServer>
<modules>

   <add name="..."    type="MyApplication.RequestDurationLoggerModule, MyApplication"/>

</modules>

</system.webServer>

三、動態注冊

http://www.cnblogs.com/TomXu/p/3756846.html

四、HttpModule的事件

參考:http://www.cnblogs.com/tangself/archive/2011/03/28/1998007.html

 

 事件名稱  功能介紹
BeginRequest 指示請求處理開始
AuthenticateRequest 封裝請求身份驗證過程
AuthorizeRequest 封裝檢查是否能利用以前緩存的輸出頁面處理請求的過程
ResolveRequestCache 從緩存中得到響應時觸發
AcquireRequestState 加載初始化Session時候觸發
PreRequestHandlerExecute 在Http請求進入HttpHandler之前觸發
PostRequestHandlerExecute 在Http請求進入HttpHandler之后觸發
ReleaseRequestState 存儲Session狀態時候觸發
UpdateRequestCache 更新緩存信息時觸發
EndRequest 在Http請求處理完成的時候觸發
PreSendRequestHenaders 在向客戶端發送Header之前觸發
PreSendRequestConternt 在向客戶端發送內容之前觸發


說明:
a、BenginRequest和EndRequest分別是HttpModule容器最開始的和最后的事件;
b、EndRequest之后還會觸發PreSendRequestHeaders事件和PreSendRequestContent事件,這不是在HttpModule外的兩個事件,表示HttpModule結束,即將開始向Client發送數據。

五、完整的httpmodule運行過程

HttpModuleHandler

說明: 
a、對於一個HttpModule,在BeginRquest中終止,但是仍然會調用EndRequest事件,以及PreSendRequestHeaders事件和PreSendRequestContent事件。也可以說是直接跳轉到EndRequest事件,而不會調用這期間的事件 
b、如果有兩個HttpModule,在第一個HttpModule的BeginRequest中終止,僅僅不會調用第二個HttpModule的BeginRequest,但仍然會調用兩個EndRequest事件,以及PreSendRequestHeaders事件和PreSendRequestContent事件。看下面的圖示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM