詳解ASP.NET 4中的URL Routing功能
本文將從URL Routing的概念開始講起,同時介紹ASP.NET 4.0中關(guān)于URL Routing的功能問題。希望本文能對大家有所幫助。
什么是URL Routing
首先,URL routing其實在ASP.NET 5 SP1中就被引入了,但是介于之前一直沒有用到,況且微軟的很多關(guān)于ASP.NET 4的介紹都把這作為一新的功能,因此就把題目取為這個吧。
之前,一個典型的ASP.NET的URL通常如下http://www.myexample.com/salesreport.aspx?year=2009
在這個URL中的salesreport.aspx代表的是一個真實存在的物理文件,后綴.aspx在url中的存在不僅完全沒有意義,而且使得這個url不是SEO-friendly的。而使用URL Routing之后,我們就可使用如下更簡潔明了的地址來訪問了,http://www.myexample.com/salesrepot/2009
使用Route Engine進(jìn)行URL Mapping
在asp.net mvc中,通過MapRoute將url映射到相應(yīng)的controller和action, 而在web form中,在Global.assx的Application_Start中,我們通過MapPageRoute來將url映射到一個頁面上
- void RegisterRoutes(RouteCollection routes)
- {
- routes.MapPageRoute("SalesRoute", "SalesReport/{year}", "~/sales.aspx");
- }
MapPageRoute這里使用了三個參數(shù),***個是給這個Route的命名,第二個是這個URL的映射Pattern, 而***一個就是對應(yīng)的ASPX頁面。除了這個最常用直接的方法之外,還可以使用其重載的其它方法,來個route設(shè)置default值,添加各種約束條件,如下面的這一個
- void RegisterRoutes(RouteCollection routes)
- {
- routes.MapPageRoute("SalesRoute",
- "SalesRoute/{year}",
- "~/sales.aspx", true,
- new RouteValueDictionary{
- { "year", DateTime.Now.Year.ToString()}},
- new RouteValueDictionary{
- { "year", @"\d{4}" } });
- }
相比于***個route,這個多了三個參數(shù),***個為boolean值,后面兩個為RouteValueDictionary, 其中***個就指定了一個default值,而***一個就是一個約束,通過正則表達(dá)式約束了參數(shù)year必須是四位的數(shù)字。
在將SalesRoute/2009成功的映射到sales.aspx頁面之后,如何在sales的code中獲取這個“2009"值呢?通過Page類的RouteData來獲取
- protected void Page_Load(object sender, EventArgs e)
- {
- string year = RouteData.Values["year"] as string;
- }
使用Routing Engine生成URL
除了解析URL之外,我們同時可以生成這些簡潔明了的URL, 如下面的代碼
- RouteValueDictionary parameters = new RouteValueDictionary
- {
- { "year", "2008" },
- { "category", "recreation" }
- };
- VirtualPathData vpd = RouteTable.Routes.GetVirtualPath(null, "SalesRoute", parameters);
- hyperLnk.NavigateUrl = vpd.VirtualPath;
這里的SalesRoute就是我們在Application_Start中注冊過的那個Route。 值得注意的是,在SalesRoute的Pattern中,我們并沒有”{category}”,那么RouteEngine怎么處理這個值呢?這時,category就為被作為一個querystring添加到url中,生成的URL將會是這樣的:http://www.myexample.com/salesreport/2009?category=recreation
此外,如果在這個sales頁面上加一個button,這個button對應(yīng)的url會不會也會如上面的url那樣簡潔呢?答案是肯定的。但是是通過在Form標(biāo)簽中,指定Action來實現(xiàn)頁面的回發(fā)。
總結(jié)
雖然這個新生添加Route功能并不能使Asp.Net Web Form變得像Asp.Net MVC那樣讓人心動,不過這至少是一個不錯的功能。
原文標(biāo)題:體驗ASP.NET 4之URL Routing
鏈接:http://www.cnblogs.com/jun1st/archive/2009/10/25/aspnet_urlrouting.html
【編輯推薦】