自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET中的URL映射

開發(fā) 后端
本文介紹ASP.NET中的URL映射,你可以用來在ASP.NET中干凈地映射或重寫URL,以及按照你自己的需求組織你的URL的結(jié)構(gòu)。

經(jīng)常有人請我指導(dǎo)應(yīng)該如何動態(tài)地“重寫”URL,以在他們的ASP.NETweb應(yīng)用中發(fā)布比較干凈的URL端點。這個博客帖子概述了幾個方法,你可以用來在ASP.NET中干凈地映射或重寫URL,以及按照你自己的需求組織你的URL的結(jié)構(gòu)。
為什么URL映射和重寫很重要?

下面是開發(fā)人員想要對URL有更大的靈活性的最常見的場景:

1) 處理這樣的情形:你要更改你的web應(yīng)用中網(wǎng)頁的結(jié)構(gòu),但你同時也要確保在你移動網(wǎng)頁后,那些被人收藏的老URL不會成為死鏈接。重寫URL允許你透明地將請求轉(zhuǎn)交到新的網(wǎng)頁地址而不出錯。

2) 在象Google,Yahoo 和 Live 這樣的搜索引擎中提高你網(wǎng)站上網(wǎng)頁的搜索相關(guān)性。具體地來說,URL重寫經(jīng)常能使你在你網(wǎng)站上網(wǎng)頁的URL里更加容易地嵌入關(guān)鍵詞,這么做往往會增加別人點擊你的鏈接的機會。從使用查詢字符串參數(shù)到使用完全限定(fully qualified)的URL也能在某些情形下提高你在搜索引擎結(jié)果中的優(yōu)先順序。使用強制referring鏈接使用同樣的大小寫(same case)和URL入口(譬如,使用weblogs.asp.net/scottgu 而不是 weblogs.asp.net/scottgu/default.aspx)的技術(shù)也能避免因跨越多個URL而造成的網(wǎng)頁排名(pagerank)的降低(avoid diluting your pagerank across multiple URLs),從而增加你的搜索結(jié)果。

在一個搜索引擎日漸驅(qū)動網(wǎng)站訪問量的世界里,在你的網(wǎng)頁排名上稍微得到一些提高就能給你的業(yè)務(wù)帶來不錯的投資回報(ROI)。逐漸地,這驅(qū)使開發(fā)人員使用URL重寫以及其他SEO(搜索引擎優(yōu)化 )技術(shù)來優(yōu)化網(wǎng)站(注,SEO是個步調(diào)很快的空間,增加你的搜索相關(guān)性的建議月月在演變)。想了解一些關(guān)于搜索引擎優(yōu)化方面好的建議的話,我建議你閱讀一下《SSW Rules to Better Google Rankings (SSW的提高Google排名之要領(lǐng))》,以及MarketPosition關(guān)于《how URLs can affect top search engine ranking (URL會如何影響頂級搜索引擎排名)》的文章。
例程的URL重寫場景

為這個博客貼子起見,我將假設(shè)我們將在一個應(yīng)用里建造一套電子商務(wù)的產(chǎn)品目錄網(wǎng)頁,產(chǎn)品是按種類來組織的(譬如,圖書,錄像,CD,DVD等等)。

讓我們假定一開始我們有個網(wǎng)頁叫Products.aspx,通過查詢字符串參數(shù)接受一個類別名稱,相應(yīng)地過濾顯示的產(chǎn)品。

但我們不想使用查詢字符串來呈示每個類別,我們想修改應(yīng)用,讓每個產(chǎn)品類別對搜索引擎來說看上去象是一個獨特的URL,并且在實際的URL中嵌入關(guān)鍵詞(而不是通過查詢字符串參數(shù))。我們將在這個博客帖子剩下來的篇幅里,討論一下達成這個目的我們可以采取的4種不同方法。

方法一:使用Request.PathInfo 參數(shù)而不是查詢字符串

我將示范的第一個方法根本不使用URL重寫,而是使用ASP.NET中不太為人所知的一個特性,Request的PathInfo屬性。

你會在上面這些URL中注意到的一個東西是,他們不再含有查詢字符串值,取而代之的是,類別參數(shù)的值是附加到URL上的,是以Products.aspx網(wǎng)頁處理器名稱之后的/參數(shù) 值的方式出現(xiàn)的。然后,一個自動化的搜索引擎爬蟲(search engine crawler)會把這些URL解釋成三個不同的URL,而不是一個URL帶有三個不同的輸入值 (搜索引擎是不理會文件擴展名的,只把它當(dāng)作URL中的另一個字符而已)。

你也許很想知道怎么在ASP.NET中處理這個附加的參數(shù)的情形。好消息是,這非常簡單。只要使用Request的PathInfo屬性就可以了,該屬性返回URL中緊隨 products.aspx 后面的那部分內(nèi)容。所以,對上面這些URL, Request.PathInfo會分別返回 “/Books”, “/DVDs”,和 “/CDs”(萬一你想知道的話, Request的Path 屬性返回“/products.aspx” )。

然后,你可以輕易地編寫一個函數(shù)來獲取產(chǎn)品類別,象這樣(下面這個函數(shù)去除前面的斜杠字符,只返回“Books”,“DVDs”,或 “CDs”):

  1. FunctionGetCategory()AsString  
  2. If(Request.PathInfo.Length=0)Then  
  3. Return""  
  4. Else  
  5. ReturnRequest.PathInfo.Substring(1)  
  6. EndIf  
  7. EndFunction 

我建立的一個展示這個技術(shù)的樣例應(yīng)用可以在這里下載。這個樣例和這個技術(shù)的很好的地方在于,為部署使用這個方法的ASP.NET應(yīng)用,不需作任何服務(wù)器配置改動。在共享主機的環(huán)境里,這個技術(shù)也行之有效。
方法二:使用HttpModule實現(xiàn)URL重寫

上述Request.PathInfo技術(shù)的替換方法是,利用ASP.NET提供的HttpContext.RewritePath方法。這個方法允許開發(fā)人員動態(tài)地重寫收到的URL的處理路徑,然后讓ASP.NET使用剛重寫過后的路徑來繼續(xù)執(zhí)行請求。

在外界看來,網(wǎng)站上有三個單獨的網(wǎng)頁(對搜索爬蟲而言,這看上去很棒)。通過使用 HttpContext的RewritePath方法,我們可以在這些請求剛進入服務(wù)器時,動態(tài)地把收到的URL重寫成單個Products.aspx網(wǎng)頁接受一個查詢字符串的類別名稱或者PathInfo參數(shù)。譬如,我們可以使用Global.asax中的Application_BeginRequest事件,來這么做:

  1. voidApplication_BeginRequest(objectsender,EventArgse){  
  2. stringfullOrigionalpath=Request.Url.ToString();  
  3. if(fullOrigionalpath.Contains("/Products/Books.aspx")){  
  4. Context.RewritePath("/Products.aspx?Category=Books");  
  5. }  
  6. elseif(fullOrigionalpath.Contains("/Products/DVDs.aspx")){  
  7. Context.RewritePath("/Products.aspx?Category=DVDs");  
  8. }  


手工編寫象上面這樣的編碼的壞處是,很枯燥乏味,而且容易犯錯。我建議你別自己寫,而是使用網(wǎng)上現(xiàn)成的HttpModule來完成這項工作。這有幾個你現(xiàn)在就可以下載和使用的免費的HttpModule:
◆UrlRewriter.net
◆UrlRewriting.net

這些模塊允許你用聲明的方式在你應(yīng)用的web.config文件里表達匹配規(guī)則。譬如,在你應(yīng)用的web.config文件里使用UrlRewriter.Net模塊來把上面的那些URL映射到單個Products.aspx頁上,我們只要把這個web.config文件添加到我們的應(yīng)用里去就可以了(不用任何編碼):

  1. <?xmlversionxmlversion="1.0"?> 
  2. <configuration> 
  3. <configSections> 
  4. <sectionnamesectionname="rewriter" 
  5. requirePermission="false" 
  6. type="Intelligencia.UrlRewriter.Configuration.
    RewriterConfigurationSectionHandler,Intelligencia.UrlRewriter"
    /> 
  7. </configSections> 
  8. <system.web> 
  9. <httpModules> 
  10. <addnameaddname="UrlRewriter"type="Intelligencia.UrlRewriter.
    RewriterHttpModule,Intelligencia.UrlRewriter"
    /> 
  11. </httpModules> 
  12. </system.web> 
  13. <rewriter> 
  14. <rewriteurlrewriteurl="~/products/books.aspx"to="~/products.aspx?category=books"/> 
  15. <rewriteurlrewriteurl="~/products/CDs.aspx"to="~/products.aspx?category=CDs"/> 
  16. <rewriteurlrewriteurl="~/products/DVDs.aspx"to="~/products.aspx?category=DVDs"/> 
  17. </rewriter> 
  18. </configuration> 

上面的HttpModule URL重寫模塊還支持正則表達式和URL模式匹配(以避免你在web.config 文件里硬寫每個URL)。所以,不用寫死類別名稱,你可以象下面這樣重寫匹配規(guī)則,把類別名稱動態(tài)地從任何/products/[類別].aspx組合的URL里取出來:

  1. <rewriter> 
  2. <rewriteurlrewriteurl="~/products/(.+).aspx"to="~/products.aspx?category=$1"/> 
  3. </rewriter> 

這使得你的編碼極其干凈,并且擴展性非常之好。

這個樣例和這個技術(shù)的很好的地方在于,為部署使用這個方法的ASP.NET應(yīng)用,不需作任何服務(wù)器配置改動。在設(shè)置為中等信任安全等級(medium trust)的共享主機的環(huán)境里,這個技術(shù)也行之有效 (只要把文件FTP/XCOPY到遠(yuǎn)程服務(wù)器就可以了,不需要安裝)。以上介紹ASP.NET中的URL映射。

【編輯推薦】

  1. 簡單介紹ASP應(yīng)用程序
  2. ASP.NET的IScriptControl
  3. 詳解ASP.NET身份驗證服務(wù)
  4. 概述ASP.NET安全
  5. ASP.NET ISAPI
責(zé)任編輯:佚名 來源: IT168
相關(guān)推薦

2009-07-23 16:28:20

URL映射ASP.NET 2.0

2009-07-22 14:23:39

URL RewriteASP.NET

2009-01-04 13:27:10

URL RewriteIISASP.NET

2009-07-28 10:59:13

ASP.NET IIS

2009-07-27 17:15:51

URL RewriteASP.NET

2009-08-05 13:16:43

ASP.NET URL

2009-07-31 09:39:59

ASP.NET和URL

2009-08-05 14:46:17

ASP.NET url

2009-10-26 15:55:43

URL Routing

2009-07-24 11:20:43

ASP.NET MVC

2009-09-24 09:26:22

ASP.NET MVC

2009-07-24 10:10:22

ASP.NET

2009-07-24 16:17:42

WebRequestEASP.NET

2009-07-07 10:14:57

基于URL權(quán)限控制

2009-07-22 17:45:35

ASP.NET教程

2009-08-04 18:05:37

動態(tài)編譯ASP.NET

2009-07-22 17:55:52

2009-07-20 17:21:43

Session狀態(tài)ASP.NET

2009-07-27 13:01:28

TreeViewASP.NET

2009-08-04 17:30:23

cookieless屬ASP.NET
點贊
收藏

51CTO技術(shù)棧公眾號