官方示例:
http://msdn.microsoft.com/zh-cn/library/dd329551(d=lightweight).aspx
簡介:
ASP.NET 4 增加了對使用 Web 窗體進行路由的內置支持。 路由是 ASP.NET 3.5 SP1 引入的一項功能,通過此功能可將應用程序配置為使用對用戶和搜索引擎有意義的 URL,這樣無需指定物理文件名。 使用這項功能,可以提高站點的用戶友好度,並增加站點內容被搜索引擎發現的概率。
使用步驟:
1.添加全局文件Global.asax,引用命名空間System.Web.Routing,(如果沒有的話,則向項目中添加對System.Web.Routing的引用)然后在Application_Start
事件中注冊相應的路由.
示例代碼如下:

protected void Application_Start(object sender, EventArgs e) { RegisteRoutes(RouteTable.Routes); } private void RegisteRoutes(RouteCollection routes) { //其中需要說明的是asp.net 4中使用routes.MapPageRoute方法來添加相應的路由規則.它和.net 3.5 sp1中的routes.add是一樣的.只不過更方便些. //第一個參數:路由規則名稱,用於區別不同的路由規則(隨便起) //第二個參數:路由規則,{}代表匹配任意,不帶{}則表示精確匹配 //第三個參數:該路由交給那個頁面處理,物理頁面的路徑 routes.MapPageRoute("", "", "~/Default.aspx"); routes.MapPageRoute("list", "Items/{action}", "~/Items/list.aspx", false, new RouteValueDictionary { { "action", "all" } }); routes.MapPageRoute("show", "Show/{action}", "~/show.aspx", false, new RouteValueDictionary { { "action", "all" } }); routes.MapPageRoute("edit", "Edit/{id}", "~/edit.aspx", false, new RouteValueDictionary { { "id", "1" } }, new RouteValueDictionary { { "id", @"\d+" } }); 官方參數說明: routeName 類型:System.String 路由的名稱。 routeUrl 類型:System.String 路由的 URL 模式。 physicalFile 類型:System.String 路由的物理 URL。 checkPhysicalUrlAccess 類型:System.Boolean 一個值,該值指示 ASP.NET 是否應驗證用戶是否有權訪問物理 URL(始終會檢查路由 URL)。 此參數設置 PageRouteHandler.CheckPhysicalUrlAccess 屬性。 defaults 類型:System.Web.Routing.RouteValueDictionary 路由的默認值。 constraints 類型:System.Web.Routing.RouteValueDictionary 一些約束,URL 請求必須滿足這些約束才能作為此路由處理。 }
獲取URL中的參數
Page.RouteData中包含我們需要的URL參數.因此,我們可以通過以下方法來獲取URL中的參數,如下:
方法一:在后台.CS文件寫如下代碼:
if (Page.RouteData.Values.ContainsKey("id")) this.lb.Text = Page.RouteData.Values["id"].ToString();
方法二:在頁面中直接使用RouteValue,如下:
<asp:Label ID="lb1" runat="server" Text="<%$RouteValue:id%>"></asp:Label>
方法三: 仍然可以用以前的Request.Form來處理
頁面url連接的創建
在實際應用肯定是要頁面跳轉的,asp.net4提供了多種方法來創建符合路由規則的頁面url。具體如下:
方法一:
直接按照規則,來創建url,如下:
<asp:HyperLink ID="link1" runat="server" Text="Show All" NavigateUrl="~/show/all"> </asp:HyperLink> <br /> <asp:HyperLink ID="HyperLink1" runat="server" Text="Edit 1" NavigateUrl="~/Edit/1"> </asp:HyperLink>
方法二:
使用RouteUrl來創建url,如下:
<asp:HyperLink ID="HyperLink2" runat="server" Text="RouteUrl Show All " NavigateUrl="<%$RouteUrl:routename=show%> "> </asp:HyperLink> <br /> <asp:HyperLink ID="HyperLink3" runat="server" Text="RouteUrl Edit 2" NavigateUrl="<%$RouteUrl:id=2,routename=edit %>"> </asp:HyperLink> <br />
方法三:
通過.cs后台代碼來現實,比如:頁面有個超連接,如下:
<asp:HyperLink ID="HyperLink4" runat="server" Text="Code behind Edit 2"> </asp:HyperLink>
那么,后台.cs代碼可以來給HyperLink的url賦值:
RouteValueDictionary p = new RouteValueDictionary { { "id", "3" } }; VirtualPathData vpd = RouteTable.Routes.GetVirtualPath(null, "edit", p); this.HyperLink4.NavigateUrl = vpd.VirtualPath;
方法四:建議寫成GetRouteUrl,這樣你以后路由規則換了,這個鏈接也不會失效
<a href="<%=this.GetRouteUrl("my-route-name", new { id="123"}) %>">xxx</a>