ASP.NET頁面執行順序 (HttpModule,HttpHandler)

來源:互聯網
上載者:User
public class HelloWorldModule : IHttpModule
{
    public HelloWorldModule()
    {
    }

    public String ModuleName
    {
        get { return "HelloWorldModule"; }
    }

    // In the Init function, register for HttpApplication
    // events by adding your handlers.
    public void Init(HttpApplication application)
    {
        application.BeginRequest +=
            (new EventHandler(this.Application_BeginRequest));
        application.EndRequest +=
            (new EventHandler(this.Application_EndRequest));
    }

    private void Application_BeginRequest(Object source,
         EventArgs e)
    {
    // Create HttpApplication and HttpContext objects to access
    // request and response properties.
        HttpApplication application = (HttpApplication)source;
        HttpContext context = application.Context;
        context.Response.Write("<h1><font color=red> HelloWorldModule: Beginning of Request</font></h1><hr>");
    }

    private void Application_EndRequest(Object source, EventArgs e)
    {
        HttpApplication application = (HttpApplication)source;
        HttpContext context = application.Context;
        context.Response.Write("<hr><h1><font color=red>HelloWorldModule: End of Request</font></h1>");
    }

    public void Dispose()
    {
    }
}

    <system.web>
   <httpModules>
    <add name="HelloWorldModule" type="HelloWorldModule"/>
   </httpModules>
    </system.web>

一 asp.net請求的處理過程
-------------------
HttpModule 必須要掌握的東西
HttpHandler 必須要掌握的東西,非常有用
以上兩個的執行個體
---------------------
asp.net 事件模型機制

-----------------------

客戶的請求頁面由aspnet_isapi.dll這個動態串連庫來處理,把請求的aspx檔案發送給CLR進行編譯執行,然後把Html流返回給瀏覽器
--------------------------
二 頁面事件
執行順序
Page_Init:初始化值或串連
Page_Load:主要使用IsPostBack,該事件主要執行一系列得操作來首次建立asp.net頁面或響應
由投遞引起得用戶端事件。在此事件之前,已還原頁面和控制項檢視狀態。
Page_DataBind:在頁面層級上調用,也可在單個控制項中調用。
DataBind_PreRender:資料繫結預呈現,恰好在儲存檢視狀態和呈現控制項之前激發此事件。
Page_Unload:此事件是執行最終清理工作的。
非確定事件
Page_Error:如果在頁面處理過程中出現未處理的例外,則激發error事件。
Page_AbortTransaction:交易事件,交易處理中如果已終止交易,則激發此事件,購物車常用。
Page_CommitTransaction:如果已成功交易,則激發此事件。
--------------------------------------------------------
Global.asax中的事件(執行順序)
Application_Start:應用程式啟動時激發
Application_BeginRquest:http請求開始時激發
Application_AuthenticateRequest: 應用程式核准http請求時激發
Session_Start: 會話啟動時激發
Application_EndRequest:Htttp請求結束時激發
Session_End:會話結束時激發
Application_End:應用程式結束時激發
Application_Error: 發生錯誤時激發
----------------------
ISAPI: 向web伺服器插入某些組建,擴充功能,增強web伺服器功能。
ISAPI: 擴充,win32的動態連結程式庫,譬如aspnet_isapi.dll,可以把ISAPI擴充看作是一個普通的應用程式,它處理的目標是HTTP請求。
ISAPI: 過濾器,web伺服器把請求傳遞給相關的過濾器,接下來過濾器可能修改請求,執行某些操作等等。
ASP.NET請求的處理過程:
基於管道模型,在模型中ASP.NET把http請求傳遞給管道中所有的模組。每個模組都接收HTTP請求,並有完全的控制權。一旦請求經過了所有的
HTTP模組,最終被HTTP處理常式處理。HTTP處理常式對請求進行一些處理,並且結果將再次經過模組管道中的HTTP模組。
-----------
httpmodule
ISAPI過濾器(篩選器):IIS本身是不支援動態網頁面的,也就是說他僅僅支援靜態HTML頁面的內容,對於.asp .aspx .cgi
.php等,IIS並不知道如果處理這些尾碼標記,它就會把它當作文本,絲毫不做處理髮送到用戶端。為瞭解決這個問題,IIS有一種機制,叫做ISAPI
的過濾器。它是一個COM組件。

ASP.NET服務在註冊到IIS的時候,會把每個擴充可以處理的副檔名註冊到IIS裡面(如*.ascx
*.aspx等)。擴充啟動後,就根據定義好的方式來處理IIS所不能處理的檔案,然後把控制權跳轉到專門處理代碼的進程中,asp.net中是
aspnet_isapi.dll。讓這個進程開始處理代碼,產生標準的HTML代碼,產生後把這些代碼加入到原有的HTML中,最後把完整的HTML返
回給IIS,IIS再把內容發送到用戶端。
----------------
HttpModule

Http模組實現了過濾器(ISAPI
filter)的功能,它是實現了System.Web.IHttpModule介面的.net組件。。這些組件通過在某些事件中註冊自身,把自己插入到
ASP.NET請求處理管道。當這些事件發生的時候,ASP.NET調用對請求有興趣的HTTP模組,這樣該模組就能處理請求了。有時候需要過慮一下
http請求,注意它不是覆蓋其他的包括系統內建的HttpModule,在Machine.config中配置完成。
--------------------------------------
HttpHandler
它實現了ISAPI
Extention的功能,它處理請求(Request)的資訊和發送響應(Response)。HttpHandler功能的通過必須實現
IHttpHandler介面。HTTP處理常式是實現System.Web.IHttpHandler介面的.NET組件。任何實現了該介面的類都可以
用於處理輸入的Http請求。它就是Http處理常式。

在以前的ASP時候,當請求一個*.asp分頁檔的時候,這個HTTP請求首
先會被一個名為inetinfo.exe進程所截獲,這個進程實際上
就是www服務。截獲之後它會將這個請求轉交給asp.dll進程,這個進程就會解釋這個asp頁面,然後將解釋後的資料流返回給用戶端瀏覽器。其實
ASP.DLL是一個依附在IIS的ISAPI檔案,它負責了對諸如ASP檔案,ASA等檔案的解釋執行,
-------------------------------------

ASP.NET的HTTP請求處理方法

當用戶端向web伺服器請求一個*.aspx的分頁檔時,同asp類似,這個http請求也會被inetinfo.exe進程截獲(www服務),它判
斷檔案尾碼之後,把這個請求轉交給ASPNET_ISAPI.DLL而ASPNET_ISAPI.DLL則會通過一個Http
PipeLine的管道,將這個http請求發送給ASPNET_WP.EXE進程,當這個HTTP請求進入ASPNET_WP.EXE進程之
後,asp.net framework就會通過HttpRuntime來處理這個Http請求,處理完畢後將結果返回給用戶端。
------------------------------------
當一個http請求被送入到HttpRuntime之後,這個Http請求會繼續被送入到一個被稱之為HttpApplication
Factory的一個容器當中,而這個容器會給出一個HttpApplication執行個體來處理傳遞進來的http請求,而後這個Http請求會依次進入
到如下幾個容器中:
HttpModule --> HttpHandler Factory --> HttpHandler
當系統內部的HttpHandler的ProcessRequest方法處理完畢之後,整個Http Request就被處理完成了,用戶端也就得到相應的東東了。
完整的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運行時內部來做到這一點,確切的說時在 HttpModule這個容器中做到這個的。
----------------------------------------
-------------------------------------
系統本身的HttpModule實現一個IHttpModule的介面,當然我們自己的類也能夠實現IHttpModule介面,這就可以替代系統的 HttpModule對象了。
ASP.NET系統中預設的HttpModule:

DefaultAuthenticationModule 確保上下文中存在 Authentication 對象。無法繼承此類。
FileAuthorizationModule 驗證遠端使用者是否具有訪問所請求檔案的 NT 許可權。無法繼承此類。
FormsAuthenticationModule 啟用 ASP.NET 應用程式以使用 Forms 身分識別驗證。無法繼承此類。
PassportAuthenticationModule 提供環繞 PassportAuthentication 服務的封裝。無法繼承此類。
SessionStateModule    為應用程式提供工作階段狀態服務。
UrlAuthorizationModule    提供基於 URL 的授權服務以允許或拒絕對指定資源的訪問。無法繼承此類。
WindowsAuthenticationModule 啟用 ASP.NET 應用程式以使用 Windows/IIS 身分識別驗證。無法繼承此類

--------------------------------------
這些系統預設的HttpModule是在檔案machine.config中配置的,和我們開發時使用到的web.config的關係是:是在
ASP.NET FRAMEWORK啟動處理一個Http
Request的時候,它會依次載入machine.config和請求頁面所在目錄的web.config檔案,如果在machine中配置了一個自己
的HttpModule,你仍然可以在所在頁面的web.config檔案中remove掉這個映射關係。 

 從網上查到是資料,感覺很重要,特此留下

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.