日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

在ASP.NET中UrlRewrite的实现(能隐藏扩展名)之一

發(fā)布時(shí)間:2025/5/22 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在ASP.NET中UrlRewrite的实现(能隐藏扩展名)之一 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
摘要:介紹如何使用 Microsoft ASP.NET 執(zhí)行動(dòng)態(tài) URL 重寫(xiě)。URL 重寫(xiě)是截取傳入 Web 請(qǐng)求并自動(dòng)將請(qǐng)求重定向到其他 URL 的過(guò)程。討論實(shí)現(xiàn) URL 重寫(xiě)的各種技術(shù),并介紹執(zhí)行 URL 重寫(xiě)的一些實(shí)際情況。

引言讓我們花點(diǎn)時(shí)間來(lái)看一下網(wǎng)站上的一些 URL。您是否發(fā)現(xiàn)一些類似于 http://www.51aspx.com/info/dispEmp%20...%20pID=459-099&;type=summary 的 URL?或者,您可能將一系列網(wǎng)頁(yè)從一個(gè)目錄或網(wǎng)站移動(dòng)到另一個(gè)目錄或網(wǎng)站,結(jié)果導(dǎo)致已將舊 URL 用作書(shū)簽的訪問(wèn)者斷開(kāi)鏈接。在本文中,我們將了解如何通過(guò)將 http://51aspx.com/CV/UrlReWriter//dispEmp ... pID=459-099&;type=summary 替換為類似于 http://51aspx.com/CV/UrlReWriter/ 的網(wǎng)址,使用 URL 重寫(xiě)將那些冗長(zhǎng)的 URL 縮寫(xiě)為富有意義且容易記憶的 URL。我們還將了解如何將 URL 重寫(xiě)用于創(chuàng)建智能 404 錯(cuò)誤。
URL 重寫(xiě)是截取傳入 Web 請(qǐng)求并自動(dòng)將請(qǐng)求重定向到其他資源的過(guò)程。執(zhí)行 URL 重寫(xiě)時(shí),通常會(huì)檢查被請(qǐng)求的 URL,并基于 URL 的值將請(qǐng)求重定向到其他 URL。例如,在進(jìn)行網(wǎng)站重組而將 /people/ 目錄下的所有網(wǎng)頁(yè)移動(dòng)到 /info/employees/ 目錄中時(shí),您可能希望使用 URL 重寫(xiě)來(lái)檢查 Web 請(qǐng)求是否指向了 /people/ 目錄中的文件。如果請(qǐng)求指向 /people/ 目錄中的文件,您可能希望自動(dòng)將請(qǐng)求重定向到 /info/employees/ 目錄中的同一文件。
使用傳統(tǒng)的 ASP,應(yīng)用 URL 重寫(xiě)的唯一方法是編寫(xiě) ISAPI 篩選器,或者購(gòu)買提供 URL 重寫(xiě)功能的第三方產(chǎn)品。但是,使用 Microsoft? ASP.NET,您可以通過(guò)很多方法來(lái)輕松地創(chuàng)建您自己的 URL 重寫(xiě)軟件。本文討論了可供 ASP.NET 開(kāi)發(fā)人員實(shí)現(xiàn) URL 重寫(xiě)的各種技術(shù),然后討論了 URL 重寫(xiě)的一些實(shí)際使用情況。在深入討論 URL 重寫(xiě)的技術(shù)細(xì)節(jié)之前,讓我們先看一些可以使用 URL 重寫(xiě)的日常情景。
返回頁(yè)首

URL 重寫(xiě)的常見(jiàn)用法創(chuàng)建數(shù)據(jù)驅(qū)動(dòng)的 ASP.NET 網(wǎng)站時(shí),通常會(huì)產(chǎn)生一個(gè)單個(gè)的網(wǎng)頁(yè),該網(wǎng)頁(yè)基于查詢字符串參數(shù)顯示數(shù)據(jù)庫(kù)數(shù)據(jù)的子集。例如,在設(shè)計(jì)電子商務(wù)站點(diǎn)時(shí),您的任務(wù)之一便是允許用戶瀏覽待售產(chǎn)品。為此,您可以創(chuàng)建一個(gè)名為 displayCategory.aspx 的頁(yè)面,該頁(yè)面將顯示給定類別的產(chǎn)品??梢酝ㄟ^(guò)查詢字符串參數(shù)來(lái)指定要查看的該類別的產(chǎn)品。也就是說(shuō),如果用戶要瀏覽待售的 Widget 產(chǎn)品,并且所有 Widget 產(chǎn)品的 CategoryID 均為 5,則用戶可以訪問(wèn)以下網(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)來(lái)選擇 URL:
  • 簡(jiǎn)短。
  • 易于鍵入。
  • 可以看出站點(diǎn)的結(jié)構(gòu)。
  • “可刪節(jié)”,允許用戶通過(guò)刪除 URL 的組成部分來(lái)瀏覽站點(diǎn)。
我還要增加一條標(biāo)準(zhǔn),即,URL 應(yīng)該便于記憶。URL http://yousite.com/displayCategory.aspx?CategoryID=5 不符合 Neilsen 的任何標(biāo)準(zhǔn),也不容易記住。要求用戶鍵入查詢字符串值將使 URL 的鍵入變得非常困難,并且只有了解查詢字符串參數(shù)的用途及其名稱/值對(duì)結(jié)構(gòu)的富有經(jīng)驗(yàn)的 Web 開(kāi)發(fā)人員才能夠?qū)?URL 進(jìn)行“刪節(jié)”。
較好的方法是允許使用切合實(shí)際且容易記憶的 URL,如 http://51aspx.com/CV/UrlReWriter/。只要看一眼 URL,您便可以推斷出將要顯示的內(nèi)容 -- 有關(guān) Widget 的信息。此 URL 也很容易記住和共享。我可以告訴我的同事“請(qǐng)查看 yoursite.com/products/Widgets,”,她可能無(wú)需再次問(wèn)我 URL 是什么即可打開(kāi)該頁(yè)面。(嘗試一下,您只需說(shuō)出“Amazon.com 頁(yè)面”即可!)此 URL 還將顯示出來(lái),并且應(yīng)該是“可刪節(jié)”的。也就是說(shuō),如果用戶刪去 URL 的末端,鍵入 http://51aspx.com/CV/UrlReWriter/,他們應(yīng)該看到所有產(chǎn)品的列表,或者至少應(yīng)該看到他們可以查看的所有類別的產(chǎn)品列表。
注意:要獲得“可刪節(jié)”URL 的最好示例,可考慮使用由許多 blog 引擎生成的 URL。要查看 2004 年 1 月 28 日的帖子,用戶可以訪問(wèn)諸如 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 重寫(xiě)還經(jīng)常用于處理網(wǎng)站重組,以免導(dǎo)致大量鏈接斷開(kāi)或書(shū)簽過(guò)期。
返回頁(yè)首

請(qǐng)求到達(dá) IIS 時(shí)將會(huì)發(fā)生什么情況在正式研究 URL 如何實(shí)現(xiàn)重寫(xiě)之前,應(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 頁(yè)面、圖像以及其他靜態(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)頁(yè)的請(qǐng)求時(shí),IIS 會(huì)將此消息路由到 asp.dll ISAPI 擴(kuò)展。然后,該 ISAPI 擴(kuò)展將加載被請(qǐng)求的 ASP 頁(yè)面,執(zhí)行該頁(yè)面,并將所呈現(xiàn)的 HTML 返回給 IIS,然后,IIS 將該 HTML 發(fā)送回請(qǐng)求客戶端。對(duì)于 ASP.NET 頁(yè)面,IIS 會(huì)將此消息路由到 aspnet_isapi.dll ISAPI 擴(kuò)展。然后,aspnet_isapi.dll ISAPI 擴(kuò)展將處理操作傳遞給托管的 ASP.NET 輔助進(jìn)程,該輔助程序?qū)⑻幚碚?qǐng)求,并返回 ASP.NET 網(wǎng)頁(yè)的呈現(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)證,并確定通過(guò)身份驗(yàn)證的用戶是否有權(quán)限訪問(wè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 重寫(xiě)。
雖然 ISAPI 篩選器可用于執(zhí)行 URL 重寫(xiě),但本文將討論如何使用 ASP.NET 實(shí)現(xiàn) URL 重寫(xiě)。不過(guò),我們將對(duì)使用 ISAPI 篩選器與使用 ASP.NET 中的技術(shù)實(shí)現(xiàn) URL 重寫(xiě)進(jìn)行權(quán)衡。
請(qǐng)求進(jìn)入 ASP.NET 引擎時(shí)將會(huì)發(fā)生什么情況在 ASP.NET 之前,需要使用 ISAPI 篩選器來(lái)實(shí)現(xiàn) IIS Web 服務(wù)器上的 URL 重寫(xiě)。由于 ASP.NET 引擎與 IIS 非常相似,因此可以使用 ASP.NET 進(jìn)行 URL 重寫(xiě)。存在相似之處的原因在于 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ò)展相似。
與 IIS 一樣,ASP.NET 引擎在請(qǐng)求的有效期內(nèi)將會(huì)觸發(fā)事件,通過(guò)發(fā)信號(hào)來(lái)表示其處理過(guò)程從一個(gè)狀態(tài)改變?yōu)榱肆硪粋€(gè)狀態(tài)。例如,當(dāng) ASP.NET 引擎首次響應(yīng)請(qǐng)求時(shí),BeginRequest 事件將被觸發(fā)。接下來(lái)觸發(fā)的是 AuthenticateRequest 事件,該事件在已建立用戶標(biāo)識(shí)時(shí)出現(xiàn)。(此外,還有大量的其他事件:AuthorizeRequestResolveRequestCacheEndRequest,等等。這些事件屬于 System.Web.HttpApplication 類;有關(guān)詳細(xì)信息,請(qǐng)參閱位于以下網(wǎng)址的技術(shù)文檔:HttpApplication Class Overview。)
正如上一部分所討論的,可以創(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)證。如果沒(méi)有使用,會(huì)自動(dòng)將用戶重定向到指定的登錄頁(yè)面。
如上所述,通過(guò)使用 IIS,傳入請(qǐng)求將最終發(fā)送給 ISAPI 擴(kuò)展,而 ISAPI 擴(kuò)展的任務(wù)是返回特定請(qǐng)求的數(shù)據(jù)。例如,在請(qǐng)求傳統(tǒng)的 ASP 網(wǎng)頁(yè)時(shí),IIS 將請(qǐng)求傳遞給 asp.dll ISAPI 擴(kuò)展,該擴(kuò)展的任務(wù)是返回被請(qǐng)求的 ASP 頁(yè)面的 HTML 標(biāo)記。ASP.NET 引擎使用相似的方法。初始化 HTTP 模塊后,ASP.NET 引擎的下一項(xiàng)任務(wù)是確定應(yīng)由哪個(gè) HTTP 處理程序來(lái)處理請(qǐng)求。
所有通過(guò) ASP.NET 引擎?zhèn)鬟f的請(qǐng)求最終都將到達(dá) HTTP 處理程序或 HTTP 處理程序工廠(HTTP 處理程序工廠僅返回 HTTP 處理程序的實(shí)例,然后使用該實(shí)例來(lái)處理請(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)頁(yè)。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。接下來(lái),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的实现(能隐藏扩展名)之一的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。