在 ASP.NET 之前,需要使用 ISAPI 篩選器來實現 IIS Web 服務器上的 URL 重寫。由於 ASP.NET 引擎與 IIS 非常相似,因此可以使用 ASP.NET 進行 URL 重寫。存在相似之處的原因在於 ASP.NET 引擎可以實現以下功能:
與 IIS 一樣,ASP.NET 引擎在請求的有效期間內將會觸發事件,通過發訊號來表示其處理過程從一個狀態改變為了另一個狀態。例如,當 ASP.NET 引擎首次響應請求時,BeginRequest事件將被觸發。接下來觸發的是AuthenticateRequest事件,該事件在已建立使用者標識時出現。(此外,還有大量的其他事件:AuthorizeRequest、ResolveRequestCache和EndRequest,等等。這些事件屬於System.Web.HttpApplication類;有關詳細資料,請參閱位於以下網址的技術文檔:HttpApplication Class Overview。)
正
如上一部分所討論的,可以建立 ISAPI 篩選器以響應 IIS 引發的事件。同樣,ASP.NET 提供了 HTTP 模組,該模組可以響應由
ASP.NET 引擎引發的事件。可以將 ASP.NET Web 應用程式配置為具有多個 HTTP 模組。對於由 ASP.NET
引擎處理的每個請求,將初始化每個已配置的 HTTP
模組,並允許將事件處理常式綁定到處理請求期間所引發的事件。請注意,對每個請求均使用了許多內建 HTTP 模組。其中的一個內建 HTTP 模組是FormsAuthenticationModule,該模組首先檢查是否使用了表單身分識別驗證,如果使用,將檢查是否對使用者進行了身分識別驗證。如果沒有使用,會自動將使用者重新導向到指定的登入頁面。
如
上所述,通過使用 IIS,傳入請求將最終發送給 ISAPI 擴充,而 ISAPI 擴充的任務是返回特定請求的資料。例如,在請求傳統的 ASP
網頁時,IIS 將請求傳遞給 asp.dll ISAPI 擴充,該擴充的任務是返回被請求的 ASP 頁面的 HTML 標籤。ASP.NET
引擎使用相似的方法。初始化 HTTP 模組後,ASP.NET 引擎的下一項任務是確定應由哪個 HTTP 處理常式來處理請求。
所有通
過 ASP.NET 引擎傳遞的請求最終都將到達 HTTP 處理常式或 HTTP 處理常式工廠(HTTP 處理常式工廠僅返回 HTTP
處理常式的執行個體,然後使用該執行個體來處理請求)。最終的 HTTP 處理常式將返迴響應,即呈現被請求的資源。此響應將被發送回 IIS,然後 IIS
將響應返回給提出請求的使用者。
ASP.NET 包括許多內建的 HTTP 處理常式。例如,PageHandlerFactory用於呈現 ASP.NET 網頁。WebServiceHandlerFactory用於呈現 ASP.NET Web 服務的響應 SOAP 信封。TraceHandler將向trace.axd呈現請求的 HTML 標籤。
圖
2 描述了如何處理對 ASP.NET 資源的請求。首先,IIS 接收到請求,並將請求調度給
aspnet_isapi.dll。接下來,ASP.NET 引擎對已配置的 HTTP 模組進行初始化。最後將調用正確的 HTTP
處理常式,並呈現被請求的資源,將所產生的標記返回給 IIS 和請求用戶端。
在
ASP.NET 之前,需要使用 ISAPI 篩選器來實現 IIS Web 服務器上的 URL 重寫。由於 ASP.NET 引擎與 IIS
非常相似,因此可以使用 ASP.NET 進行 URL 重寫。存在相似之處的原因在於 ASP.NET 引擎可以實現以下功能:
與 IIS 一樣,ASP.NET 引擎在請求的有效期間內將會觸發事件,通過發訊號來表示其處理過程從一個狀態改變為了另一個狀態。例如,當 ASP.NET 引擎首次響應請求時,BeginRequest事件將被觸發。接下來觸發的是AuthenticateRequest事件,該事件在已建立使用者標識時出現。(此外,還有大量的其他事件:AuthorizeRequest、ResolveRequestCache和EndRequest,等等。這些事件屬於System.Web.HttpApplication類;有關詳細資料,請參閱位於以下網址的技術文檔:HttpApplication Class Overview。)
正
如上一部分所討論的,可以建立 ISAPI 篩選器以響應 IIS 引發的事件。同樣,ASP.NET 提供了 HTTP 模組,該模組可以響應由
ASP.NET 引擎引發的事件。可以將 ASP.NET Web 應用程式配置為具有多個 HTTP 模組。對於由 ASP.NET
引擎處理的每個請求,將初始化每個已配置的 HTTP
模組,並允許將事件處理常式綁定到處理請求期間所引發的事件。請注意,對每個請求均使用了許多內建 HTTP 模組。其中的一個內建 HTTP 模組是FormsAuthenticationModule,該模組首先檢查是否使用了表單身分識別驗證,如果使用,將檢查是否對使用者進行了身分識別驗證。如果沒有使用,會自動將使用者重新導向到指定的登入頁面。
如
上所述,通過使用 IIS,傳入請求將最終發送給 ISAPI 擴充,而 ISAPI 擴充的任務是返回特定請求的資料。例如,在請求傳統的 ASP
網頁時,IIS 將請求傳遞給 asp.dll ISAPI 擴充,該擴充的任務是返回被請求的 ASP 頁面的 HTML 標籤。ASP.NET
引擎使用相似的方法。初始化 HTTP 模組後,ASP.NET 引擎的下一項任務是確定應由哪個 HTTP 處理常式來處理請求。
所有通
過 ASP.NET 引擎傳遞的請求最終都將到達 HTTP 處理常式或 HTTP 處理常式工廠(HTTP 處理常式工廠僅返回 HTTP
處理常式的執行個體,然後使用該執行個體來處理請求)。最終的 HTTP 處理常式將返迴響應,即呈現被請求的資源。此響應將被發送回 IIS,然後 IIS
將響應返回給提出請求的使用者。
ASP.NET 包括許多內建的 HTTP 處理常式。例如,PageHandlerFactory用於呈現 ASP.NET 網頁。WebServiceHandlerFactory用於呈現 ASP.NET Web 服務的響應 SOAP 信封。TraceHandler將向trace.axd呈現請求的 HTML 標籤。
圖
2 描述了如何處理對 ASP.NET 資源的請求。首先,IIS 接收到請求,並將請求調度給
aspnet_isapi.dll。接下來,ASP.NET 引擎對已配置的 HTTP 模組進行初始化。最後將調用正確的 HTTP
處理常式,並呈現被請求的資源,將所產生的標記返回給 IIS 和請求用戶端。