在ASP.NET中UrlRewrite的实现(能隐藏扩展名)之一
生活随笔
收集整理的這篇文章主要介紹了
在ASP.NET中UrlRewrite的实现(能隐藏扩展名)之一
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
摘要:介紹如何使用 Microsoft ASP.NET 執(zhí)行動(dòng)態(tài) URL 重寫。URL 重寫是截取傳入 Web 請(qǐng)求并自動(dòng)將請(qǐng)求重定向到其他 URL 的過程。討論實(shí)現(xiàn) URL 重寫的各種技術(shù),并介紹執(zhí)行 URL 重寫的一些實(shí)際情況。
引言讓我們花點(diǎn)時(shí)間來看一下網(wǎng)站上的一些 URL。您是否發(fā)現(xiàn)一些類似于 http://www.51aspx.com/info/dispEmp%20...%20pID=459-099&;type=summary 的 URL?或者,您可能將一系列網(wǎng)頁從一個(gè)目錄或網(wǎng)站移動(dòng)到另一個(gè)目錄或網(wǎng)站,結(jié)果導(dǎo)致已將舊 URL 用作書簽的訪問者斷開鏈接。在本文中,我們將了解如何通過將 http://51aspx.com/CV/UrlReWriter//dispEmp ... pID=459-099&;type=summary 替換為類似于 http://51aspx.com/CV/UrlReWriter/ 的網(wǎng)址,使用 URL 重寫將那些冗長的 URL 縮寫為富有意義且容易記憶的 URL。我們還將了解如何將 URL 重寫用于創(chuàng)建智能 404 錯(cuò)誤。
URL 重寫是截取傳入 Web 請(qǐng)求并自動(dòng)將請(qǐng)求重定向到其他資源的過程。執(zhí)行 URL 重寫時(shí),通常會(huì)檢查被請(qǐng)求的 URL,并基于 URL 的值將請(qǐng)求重定向到其他 URL。例如,在進(jìn)行網(wǎng)站重組而將 /people/ 目錄下的所有網(wǎng)頁移動(dòng)到 /info/employees/ 目錄中時(shí),您可能希望使用 URL 重寫來檢查 Web 請(qǐng)求是否指向了 /people/ 目錄中的文件。如果請(qǐng)求指向 /people/ 目錄中的文件,您可能希望自動(dòng)將請(qǐng)求重定向到 /info/employees/ 目錄中的同一文件。
使用傳統(tǒng)的 ASP,應(yīng)用 URL 重寫的唯一方法是編寫 ISAPI 篩選器,或者購買提供 URL 重寫功能的第三方產(chǎn)品。但是,使用 Microsoft? ASP.NET,您可以通過很多方法來輕松地創(chuàng)建您自己的 URL 重寫軟件。本文討論了可供 ASP.NET 開發(fā)人員實(shí)現(xiàn) URL 重寫的各種技術(shù),然后討論了 URL 重寫的一些實(shí)際使用情況。在深入討論 URL 重寫的技術(shù)細(xì)節(jié)之前,讓我們先看一些可以使用 URL 重寫的日常情景。
返回頁首
URL 重寫的常見用法創(chuàng)建數(shù)據(jù)驅(qū)動(dòng)的 ASP.NET 網(wǎng)站時(shí),通常會(huì)產(chǎn)生一個(gè)單個(gè)的網(wǎng)頁,該網(wǎng)頁基于查詢字符串參數(shù)顯示數(shù)據(jù)庫數(shù)據(jù)的子集。例如,在設(shè)計(jì)電子商務(wù)站點(diǎn)時(shí),您的任務(wù)之一便是允許用戶瀏覽待售產(chǎn)品。為此,您可以創(chuàng)建一個(gè)名為 displayCategory.aspx 的頁面,該頁面將顯示給定類別的產(chǎn)品。可以通過查詢字符串參數(shù)來指定要查看的該類別的產(chǎn)品。也就是說,如果用戶要瀏覽待售的 Widget 產(chǎn)品,并且所有 Widget 產(chǎn)品的 CategoryID 均為 5,則用戶可以訪問以下網(wǎng)址:http://51aspx.com/CV/UrlReWriter/displayCategory.aspx?CategoryID=5。
創(chuàng)建具有此類 URL 的網(wǎng)站有兩點(diǎn)不足:首先,從最終用戶的角度考慮,URL http://51aspx.com/CV/UrlReWriter/displayCategory.aspx?CategoryID=5 比較雜亂。可用性專家 Jakob Neilsen 建議遵循以下標(biāo)準(zhǔn)來選擇 URL:
較好的方法是允許使用切合實(shí)際且容易記憶的 URL,如 http://51aspx.com/CV/UrlReWriter/。只要看一眼 URL,您便可以推斷出將要顯示的內(nèi)容 -- 有關(guān) Widget 的信息。此 URL 也很容易記住和共享。我可以告訴我的同事“請(qǐng)查看 yoursite.com/products/Widgets,”,她可能無需再次問我 URL 是什么即可打開該頁面。(嘗試一下,您只需說出“Amazon.com 頁面”即可!)此 URL 還將顯示出來,并且應(yīng)該是“可刪節(jié)”的。也就是說,如果用戶刪去 URL 的末端,鍵入 http://51aspx.com/CV/UrlReWriter/,他們應(yīng)該看到所有產(chǎn)品的列表,或者至少應(yīng)該看到他們可以查看的所有類別的產(chǎn)品列表。
注意:要獲得“可刪節(jié)”URL 的最好示例,可考慮使用由許多 blog 引擎生成的 URL。要查看 2004 年 1 月 28 日的帖子,用戶可以訪問諸如 http://someblog.com/2004/01/28 的 URL。如果該 URL 被刪節(jié)為 http://someblog.com/2004/01,用戶將看到 2004 年 1 月的所有帖子。將該 URL 進(jìn)一步刪節(jié)為 http://someblog.com/2004 將顯示 2004 年的所有帖子。
除了簡(jiǎn)化 URL 之外,URL 重寫還經(jīng)常用于處理網(wǎng)站重組,以免導(dǎo)致大量鏈接斷開或書簽過期。
返回頁首
請(qǐng)求到達(dá) IIS 時(shí)將會(huì)發(fā)生什么情況在正式研究 URL 如何實(shí)現(xiàn)重寫之前,應(yīng)首先了解 Microsoft? Internet Information Services (IIS) 如何處理傳入請(qǐng)求,這一點(diǎn)非常重要。當(dāng)請(qǐng)求到達(dá) IIS Web 服務(wù)器時(shí),IIS 檢查被請(qǐng)求文件的擴(kuò)展名以確定如何處理該請(qǐng)求。IIS 可以自行處理請(qǐng)求(如 HTML 頁面、圖像以及其他靜態(tài)內(nèi)容),或者將請(qǐng)求路由到 ISAPI 擴(kuò)展。(ISAPI 擴(kuò)展是一個(gè)處理傳入 Web 請(qǐng)求的非托管編譯類。其任務(wù)是生成被請(qǐng)求資源的內(nèi)容。)
例如,當(dāng)傳入針對(duì) Info.asp 網(wǎng)頁的請(qǐng)求時(shí),IIS 會(huì)將此消息路由到 asp.dll ISAPI 擴(kuò)展。然后,該 ISAPI 擴(kuò)展將加載被請(qǐng)求的 ASP 頁面,執(zhí)行該頁面,并將所呈現(xiàn)的 HTML 返回給 IIS,然后,IIS 將該 HTML 發(fā)送回請(qǐng)求客戶端。對(duì)于 ASP.NET 頁面,IIS 會(huì)將此消息路由到 aspnet_isapi.dll ISAPI 擴(kuò)展。然后,aspnet_isapi.dll ISAPI 擴(kuò)展將處理操作傳遞給托管的 ASP.NET 輔助進(jìn)程,該輔助程序?qū)⑻幚碚?qǐng)求,并返回 ASP.NET 網(wǎng)頁的呈現(xiàn) HTML。
您可以自定義 IIS,以指定擴(kuò)展名與 ISAPI 擴(kuò)展的映射關(guān)系。圖 1 顯示了 Internet Information Services 管理工具的“應(yīng)用程序配置”對(duì)話框。請(qǐng)注意,與 ASP.NET 有關(guān)的擴(kuò)展名(.aspx、ascx、config、asmx、rem、cs、vb 及其他)均已映射到 aspnet_isapi.dll ISAPI 擴(kuò)展。
圖 1. 已配置的文件擴(kuò)展名映射
討論 IIS 如何管理傳入請(qǐng)求稍稍超出了本文范圍。但是可以在 Michele Leroux Bustamante 的文章 Inside IIS and ASP.NET 中找到對(duì)此內(nèi)容的深入討論。ASP.NET 引擎僅處理那些擴(kuò)展名已明確映射至 IIS 中的 aspnet_isapi.dll 的傳入 Web 請(qǐng)求,了解這一點(diǎn)非常重要。
使用 ISAPI 篩選器檢查請(qǐng)求IIS 除了可以將傳入 Web 請(qǐng)求的文件擴(kuò)展名映射到相應(yīng)的 ISAPI 擴(kuò)展之外,還將執(zhí)行許多其他任務(wù)。例如,IIS 將嘗試對(duì)發(fā)出請(qǐng)求的用戶進(jìn)行身份驗(yàn)證,并確定通過身份驗(yàn)證的用戶是否有權(quán)限訪問被請(qǐng)求的文件。在處理請(qǐng)求的有效期內(nèi),IIS 將經(jīng)歷幾個(gè)狀態(tài)。在每個(gè)狀態(tài)下,IIS 都將引發(fā)可以使用 ISAPI 篩選器以編程方式進(jìn)行處理的事件。
與 ISAPI 擴(kuò)展一樣,ISAPI 篩選器是在 Web 服務(wù)器上安裝的非托管代碼塊。ISAPI 擴(kuò)展被設(shè)計(jì)為可以響應(yīng)針對(duì)特定文件類型的請(qǐng)求。另一方面,ISAPI 篩選器還包含可以對(duì) IIS 引發(fā)的事件進(jìn)行響應(yīng)的代碼。ISAPI 篩選器可以截取甚至修改傳入和傳出的數(shù)據(jù)。ISAPI 篩選器可以應(yīng)用于很多方面,包括:
請(qǐng)求進(jìn)入 ASP.NET 引擎時(shí)將會(huì)發(fā)生什么情況在 ASP.NET 之前,需要使用 ISAPI 篩選器來實(shí)現(xiàn) IIS Web 服務(wù)器上的 URL 重寫。由于 ASP.NET 引擎與 IIS 非常相似,因此可以使用 ASP.NET 進(jìn)行 URL 重寫。存在相似之處的原因在于 ASP.NET 引擎可以實(shí)現(xiàn)以下功能:
正如上一部分所討論的,可以創(chuàng)建 ISAPI 篩選器以響應(yīng) IIS 引發(fā)的事件。同樣,ASP.NET 提供了 HTTP 模塊,該模塊可以響應(yīng)由 ASP.NET 引擎引發(fā)的事件。可以將 ASP.NET Web 應(yīng)用程序配置為具有多個(gè) HTTP 模塊。對(duì)于由 ASP.NET 引擎處理的每個(gè)請(qǐng)求,將初始化每個(gè)已配置的 HTTP 模塊,并允許將事件處理程序綁定到處理請(qǐng)求期間所引發(fā)的事件。請(qǐng)注意,對(duì)每個(gè)請(qǐng)求均使用了許多內(nèi)置 HTTP 模塊。其中的一個(gè)內(nèi)置 HTTP 模塊是 FormsAuthenticationModule,該模塊首先檢查是否使用了窗體身份驗(yàn)證,如果使用,將檢查是否對(duì)用戶進(jìn)行了身份驗(yàn)證。如果沒有使用,會(huì)自動(dòng)將用戶重定向到指定的登錄頁面。
如上所述,通過使用 IIS,傳入請(qǐng)求將最終發(fā)送給 ISAPI 擴(kuò)展,而 ISAPI 擴(kuò)展的任務(wù)是返回特定請(qǐng)求的數(shù)據(jù)。例如,在請(qǐng)求傳統(tǒng)的 ASP 網(wǎng)頁時(shí),IIS 將請(qǐng)求傳遞給 asp.dll ISAPI 擴(kuò)展,該擴(kuò)展的任務(wù)是返回被請(qǐng)求的 ASP 頁面的 HTML 標(biāo)記。ASP.NET 引擎使用相似的方法。初始化 HTTP 模塊后,ASP.NET 引擎的下一項(xiàng)任務(wù)是確定應(yīng)由哪個(gè) HTTP 處理程序來處理請(qǐng)求。
所有通過 ASP.NET 引擎?zhèn)鬟f的請(qǐng)求最終都將到達(dá) HTTP 處理程序或 HTTP 處理程序工廠(HTTP 處理程序工廠僅返回 HTTP 處理程序的實(shí)例,然后使用該實(shí)例來處理請(qǐng)求)。最終的 HTTP 處理程序?qū)⒎祷仨憫?yīng),即呈現(xiàn)被請(qǐng)求的資源。此響應(yīng)將被發(fā)送回 IIS,然后 IIS 將響應(yīng)返回給提出請(qǐng)求的用戶。
ASP.NET 包括許多內(nèi)置的 HTTP 處理程序。例如,PageHandlerFactory 用于呈現(xiàn) ASP.NET 網(wǎng)頁。WebServiceHandlerFactory 用于呈現(xiàn) ASP.NET Web 服務(wù)的響應(yīng) SOAP 信封。TraceHandler 將向 trace.axd 呈現(xiàn)請(qǐng)求的 HTML 標(biāo)記。
圖 2 描述了如何處理對(duì) ASP.NET 資源的請(qǐng)求。首先,IIS 接收到請(qǐng)求,并將請(qǐng)求調(diào)度給 aspnet_isapi.dll。接下來,ASP.NET 引擎對(duì)已配置的 HTTP 模塊進(jìn)行初始化。最后將調(diào)用正確的 HTTP 處理程序,并呈現(xiàn)被請(qǐng)求的資源,將所生成的標(biāo)記返回給 IIS 和請(qǐng)求客戶端。
圖 2. IIS 和 ASP.NET 正在處理請(qǐng)求
引言讓我們花點(diǎn)時(shí)間來看一下網(wǎng)站上的一些 URL。您是否發(fā)現(xiàn)一些類似于 http://www.51aspx.com/info/dispEmp%20...%20pID=459-099&;type=summary 的 URL?或者,您可能將一系列網(wǎng)頁從一個(gè)目錄或網(wǎng)站移動(dòng)到另一個(gè)目錄或網(wǎng)站,結(jié)果導(dǎo)致已將舊 URL 用作書簽的訪問者斷開鏈接。在本文中,我們將了解如何通過將 http://51aspx.com/CV/UrlReWriter//dispEmp ... pID=459-099&;type=summary 替換為類似于 http://51aspx.com/CV/UrlReWriter/ 的網(wǎng)址,使用 URL 重寫將那些冗長的 URL 縮寫為富有意義且容易記憶的 URL。我們還將了解如何將 URL 重寫用于創(chuàng)建智能 404 錯(cuò)誤。
URL 重寫是截取傳入 Web 請(qǐng)求并自動(dòng)將請(qǐng)求重定向到其他資源的過程。執(zhí)行 URL 重寫時(shí),通常會(huì)檢查被請(qǐng)求的 URL,并基于 URL 的值將請(qǐng)求重定向到其他 URL。例如,在進(jìn)行網(wǎng)站重組而將 /people/ 目錄下的所有網(wǎng)頁移動(dòng)到 /info/employees/ 目錄中時(shí),您可能希望使用 URL 重寫來檢查 Web 請(qǐng)求是否指向了 /people/ 目錄中的文件。如果請(qǐng)求指向 /people/ 目錄中的文件,您可能希望自動(dòng)將請(qǐng)求重定向到 /info/employees/ 目錄中的同一文件。
使用傳統(tǒng)的 ASP,應(yīng)用 URL 重寫的唯一方法是編寫 ISAPI 篩選器,或者購買提供 URL 重寫功能的第三方產(chǎn)品。但是,使用 Microsoft? ASP.NET,您可以通過很多方法來輕松地創(chuàng)建您自己的 URL 重寫軟件。本文討論了可供 ASP.NET 開發(fā)人員實(shí)現(xiàn) URL 重寫的各種技術(shù),然后討論了 URL 重寫的一些實(shí)際使用情況。在深入討論 URL 重寫的技術(shù)細(xì)節(jié)之前,讓我們先看一些可以使用 URL 重寫的日常情景。
返回頁首
URL 重寫的常見用法創(chuàng)建數(shù)據(jù)驅(qū)動(dòng)的 ASP.NET 網(wǎng)站時(shí),通常會(huì)產(chǎn)生一個(gè)單個(gè)的網(wǎng)頁,該網(wǎng)頁基于查詢字符串參數(shù)顯示數(shù)據(jù)庫數(shù)據(jù)的子集。例如,在設(shè)計(jì)電子商務(wù)站點(diǎn)時(shí),您的任務(wù)之一便是允許用戶瀏覽待售產(chǎn)品。為此,您可以創(chuàng)建一個(gè)名為 displayCategory.aspx 的頁面,該頁面將顯示給定類別的產(chǎn)品。可以通過查詢字符串參數(shù)來指定要查看的該類別的產(chǎn)品。也就是說,如果用戶要瀏覽待售的 Widget 產(chǎn)品,并且所有 Widget 產(chǎn)品的 CategoryID 均為 5,則用戶可以訪問以下網(wǎng)址:http://51aspx.com/CV/UrlReWriter/displayCategory.aspx?CategoryID=5。
創(chuàng)建具有此類 URL 的網(wǎng)站有兩點(diǎn)不足:首先,從最終用戶的角度考慮,URL http://51aspx.com/CV/UrlReWriter/displayCategory.aspx?CategoryID=5 比較雜亂。可用性專家 Jakob Neilsen 建議遵循以下標(biāo)準(zhǔn)來選擇 URL:
- 簡(jiǎn)短。
- 易于鍵入。
- 可以看出站點(diǎn)的結(jié)構(gòu)。
- “可刪節(jié)”,允許用戶通過刪除 URL 的組成部分來瀏覽站點(diǎn)。
較好的方法是允許使用切合實(shí)際且容易記憶的 URL,如 http://51aspx.com/CV/UrlReWriter/。只要看一眼 URL,您便可以推斷出將要顯示的內(nèi)容 -- 有關(guān) Widget 的信息。此 URL 也很容易記住和共享。我可以告訴我的同事“請(qǐng)查看 yoursite.com/products/Widgets,”,她可能無需再次問我 URL 是什么即可打開該頁面。(嘗試一下,您只需說出“Amazon.com 頁面”即可!)此 URL 還將顯示出來,并且應(yīng)該是“可刪節(jié)”的。也就是說,如果用戶刪去 URL 的末端,鍵入 http://51aspx.com/CV/UrlReWriter/,他們應(yīng)該看到所有產(chǎn)品的列表,或者至少應(yīng)該看到他們可以查看的所有類別的產(chǎn)品列表。
注意:要獲得“可刪節(jié)”URL 的最好示例,可考慮使用由許多 blog 引擎生成的 URL。要查看 2004 年 1 月 28 日的帖子,用戶可以訪問諸如 http://someblog.com/2004/01/28 的 URL。如果該 URL 被刪節(jié)為 http://someblog.com/2004/01,用戶將看到 2004 年 1 月的所有帖子。將該 URL 進(jìn)一步刪節(jié)為 http://someblog.com/2004 將顯示 2004 年的所有帖子。
除了簡(jiǎn)化 URL 之外,URL 重寫還經(jīng)常用于處理網(wǎng)站重組,以免導(dǎo)致大量鏈接斷開或書簽過期。
返回頁首
請(qǐng)求到達(dá) IIS 時(shí)將會(huì)發(fā)生什么情況在正式研究 URL 如何實(shí)現(xiàn)重寫之前,應(yīng)首先了解 Microsoft? Internet Information Services (IIS) 如何處理傳入請(qǐng)求,這一點(diǎn)非常重要。當(dāng)請(qǐng)求到達(dá) IIS Web 服務(wù)器時(shí),IIS 檢查被請(qǐng)求文件的擴(kuò)展名以確定如何處理該請(qǐng)求。IIS 可以自行處理請(qǐng)求(如 HTML 頁面、圖像以及其他靜態(tài)內(nèi)容),或者將請(qǐng)求路由到 ISAPI 擴(kuò)展。(ISAPI 擴(kuò)展是一個(gè)處理傳入 Web 請(qǐng)求的非托管編譯類。其任務(wù)是生成被請(qǐng)求資源的內(nèi)容。)
例如,當(dāng)傳入針對(duì) Info.asp 網(wǎng)頁的請(qǐng)求時(shí),IIS 會(huì)將此消息路由到 asp.dll ISAPI 擴(kuò)展。然后,該 ISAPI 擴(kuò)展將加載被請(qǐng)求的 ASP 頁面,執(zhí)行該頁面,并將所呈現(xiàn)的 HTML 返回給 IIS,然后,IIS 將該 HTML 發(fā)送回請(qǐng)求客戶端。對(duì)于 ASP.NET 頁面,IIS 會(huì)將此消息路由到 aspnet_isapi.dll ISAPI 擴(kuò)展。然后,aspnet_isapi.dll ISAPI 擴(kuò)展將處理操作傳遞給托管的 ASP.NET 輔助進(jìn)程,該輔助程序?qū)⑻幚碚?qǐng)求,并返回 ASP.NET 網(wǎng)頁的呈現(xiàn) HTML。
您可以自定義 IIS,以指定擴(kuò)展名與 ISAPI 擴(kuò)展的映射關(guān)系。圖 1 顯示了 Internet Information Services 管理工具的“應(yīng)用程序配置”對(duì)話框。請(qǐng)注意,與 ASP.NET 有關(guān)的擴(kuò)展名(.aspx、ascx、config、asmx、rem、cs、vb 及其他)均已映射到 aspnet_isapi.dll ISAPI 擴(kuò)展。
圖 1. 已配置的文件擴(kuò)展名映射
討論 IIS 如何管理傳入請(qǐng)求稍稍超出了本文范圍。但是可以在 Michele Leroux Bustamante 的文章 Inside IIS and ASP.NET 中找到對(duì)此內(nèi)容的深入討論。ASP.NET 引擎僅處理那些擴(kuò)展名已明確映射至 IIS 中的 aspnet_isapi.dll 的傳入 Web 請(qǐng)求,了解這一點(diǎn)非常重要。
使用 ISAPI 篩選器檢查請(qǐng)求IIS 除了可以將傳入 Web 請(qǐng)求的文件擴(kuò)展名映射到相應(yīng)的 ISAPI 擴(kuò)展之外,還將執(zhí)行許多其他任務(wù)。例如,IIS 將嘗試對(duì)發(fā)出請(qǐng)求的用戶進(jìn)行身份驗(yàn)證,并確定通過身份驗(yàn)證的用戶是否有權(quán)限訪問被請(qǐng)求的文件。在處理請(qǐng)求的有效期內(nèi),IIS 將經(jīng)歷幾個(gè)狀態(tài)。在每個(gè)狀態(tài)下,IIS 都將引發(fā)可以使用 ISAPI 篩選器以編程方式進(jìn)行處理的事件。
與 ISAPI 擴(kuò)展一樣,ISAPI 篩選器是在 Web 服務(wù)器上安裝的非托管代碼塊。ISAPI 擴(kuò)展被設(shè)計(jì)為可以響應(yīng)針對(duì)特定文件類型的請(qǐng)求。另一方面,ISAPI 篩選器還包含可以對(duì) IIS 引發(fā)的事件進(jìn)行響應(yīng)的代碼。ISAPI 篩選器可以截取甚至修改傳入和傳出的數(shù)據(jù)。ISAPI 篩選器可以應(yīng)用于很多方面,包括:
- 身份驗(yàn)證和授權(quán)。
- 記錄和監(jiān)視。
- HTTP 壓縮。
- URL 重寫。
請(qǐng)求進(jìn)入 ASP.NET 引擎時(shí)將會(huì)發(fā)生什么情況在 ASP.NET 之前,需要使用 ISAPI 篩選器來實(shí)現(xiàn) IIS Web 服務(wù)器上的 URL 重寫。由于 ASP.NET 引擎與 IIS 非常相似,因此可以使用 ASP.NET 進(jìn)行 URL 重寫。存在相似之處的原因在于 ASP.NET 引擎可以實(shí)現(xiàn)以下功能:
- 在處理請(qǐng)求時(shí)可以引發(fā)事件。
- 允許任意數(shù)量的 HTTP 模塊處理所引發(fā)的事件,這與 IIS 的 ISAPI 篩選器相似。
- 將呈現(xiàn)被請(qǐng)求資源這項(xiàng)任務(wù)委托給 HTTP 處理程序,該處理程序與 IIS 的 ISAPI 擴(kuò)展相似。
正如上一部分所討論的,可以創(chuàng)建 ISAPI 篩選器以響應(yīng) IIS 引發(fā)的事件。同樣,ASP.NET 提供了 HTTP 模塊,該模塊可以響應(yīng)由 ASP.NET 引擎引發(fā)的事件。可以將 ASP.NET Web 應(yīng)用程序配置為具有多個(gè) HTTP 模塊。對(duì)于由 ASP.NET 引擎處理的每個(gè)請(qǐng)求,將初始化每個(gè)已配置的 HTTP 模塊,并允許將事件處理程序綁定到處理請(qǐng)求期間所引發(fā)的事件。請(qǐng)注意,對(duì)每個(gè)請(qǐng)求均使用了許多內(nèi)置 HTTP 模塊。其中的一個(gè)內(nèi)置 HTTP 模塊是 FormsAuthenticationModule,該模塊首先檢查是否使用了窗體身份驗(yàn)證,如果使用,將檢查是否對(duì)用戶進(jìn)行了身份驗(yàn)證。如果沒有使用,會(huì)自動(dòng)將用戶重定向到指定的登錄頁面。
如上所述,通過使用 IIS,傳入請(qǐng)求將最終發(fā)送給 ISAPI 擴(kuò)展,而 ISAPI 擴(kuò)展的任務(wù)是返回特定請(qǐng)求的數(shù)據(jù)。例如,在請(qǐng)求傳統(tǒng)的 ASP 網(wǎng)頁時(shí),IIS 將請(qǐng)求傳遞給 asp.dll ISAPI 擴(kuò)展,該擴(kuò)展的任務(wù)是返回被請(qǐng)求的 ASP 頁面的 HTML 標(biāo)記。ASP.NET 引擎使用相似的方法。初始化 HTTP 模塊后,ASP.NET 引擎的下一項(xiàng)任務(wù)是確定應(yīng)由哪個(gè) HTTP 處理程序來處理請(qǐng)求。
所有通過 ASP.NET 引擎?zhèn)鬟f的請(qǐng)求最終都將到達(dá) HTTP 處理程序或 HTTP 處理程序工廠(HTTP 處理程序工廠僅返回 HTTP 處理程序的實(shí)例,然后使用該實(shí)例來處理請(qǐng)求)。最終的 HTTP 處理程序?qū)⒎祷仨憫?yīng),即呈現(xiàn)被請(qǐng)求的資源。此響應(yīng)將被發(fā)送回 IIS,然后 IIS 將響應(yīng)返回給提出請(qǐng)求的用戶。
ASP.NET 包括許多內(nèi)置的 HTTP 處理程序。例如,PageHandlerFactory 用于呈現(xiàn) ASP.NET 網(wǎng)頁。WebServiceHandlerFactory 用于呈現(xiàn) ASP.NET Web 服務(wù)的響應(yīng) SOAP 信封。TraceHandler 將向 trace.axd 呈現(xiàn)請(qǐng)求的 HTML 標(biāo)記。
圖 2 描述了如何處理對(duì) ASP.NET 資源的請(qǐng)求。首先,IIS 接收到請(qǐng)求,并將請(qǐng)求調(diào)度給 aspnet_isapi.dll。接下來,ASP.NET 引擎對(duì)已配置的 HTTP 模塊進(jìn)行初始化。最后將調(diào)用正確的 HTTP 處理程序,并呈現(xiàn)被請(qǐng)求的資源,將所生成的標(biāo)記返回給 IIS 和請(qǐng)求客戶端。
圖 2. IIS 和 ASP.NET 正在處理請(qǐng)求
轉(zhuǎn)載于:https://www.cnblogs.com/yssoft/articles/1488080.html
總結(jié)
以上是生活随笔為你收集整理的在ASP.NET中UrlRewrite的实现(能隐藏扩展名)之一的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Chrome的扩展开发(二)
- 下一篇: 刘学州寻亲事件 刘学州寻亲事件的前因后果