1. 程式人生 > >ASP.NET MVC5(一)—— URL路由

ASP.NET MVC5(一)—— URL路由

source rain index 不能 net const 自動 linq 映射

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Web;
  5 using System.Web.Mvc;
  6 using System.Web.Mvc.Routing.Constraints;
  7 using System.Web.Routing;
  8 
  9 namespace UrlAndRoutes
 10 {
 11     public class RouteConfig
 12     {
 13         public
static void RegisterRoutes(RouteCollection routes) 14 { 15 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 16 //路由系統把url拆分成多個片段,如:/Home/Index 為兩個片段,可以通過約束路由控制 17 //路由順序:一般情況下是以在RouteCollection對象中的出現順序執行的,如果先匹配到路由,後面的將會不執行 18 //URL模式的兩個關鍵行為:保守的(Conservative),寬松的(Liberal)
19 { 20 //這兩種路由並不能對根目錄進行解析 21 22 //添加路由的方式之一,新建一條路由並添加到routes中 23 Route route = new Route("{controller}/{action}", new MvcRouteHandler()); 24 routes.Add("One", route); 25 26 //添加路由的方式之二,映射指定路由 27 routes.MapRoute(""
, "{controller}/{action}"); 28 } 29 //定義默認值 30 { 31 //只給動作定義默認值,有默認值的可以省略其片段,自動匹配默認值 32 routes.MapRoute("", "{controller}/{action}", new { action = "Index" }); 33 //控制器於動作都定義默認值,這種定義可以識別根目錄,自動匹配到默認值中,最多匹配兩個片段 34 routes.MapRoute("", "{controller}/{action}", new { controller = "Home", action = "Index" }); 35 } 36 //使用靜態URL片段 37 { 38 //使用靜態字段,URL中第一個片段必須是固定的public(自定義)才能匹配到 39 routes.MapRoute("", "public/{controller}/{action}", new { controller = "Home", action = "Index" }); 40 //混合片段URL模式,第一個片段必須以X開頭,controller取自除X以外的部分 41 routes.MapRoute("", "X{controller}/{action}", new { controller = "Home", action = "Index" }); 42 //靜態字段混合片段結合,該url中不包含controller的可變片段,所以會使用默認值, 43 //這意味著對Shop控制器上的動作,都會被轉換成對Home控制器的請求 44 routes.MapRoute("", "Shop/{action}", new { controller = "Home" }); 45 } 46 //定義自定義片段變量 47 { 48 //controller,action,area等是數據特殊變量名,所以在自定義片段變量中,不可以使用 49 //Id為自定義片段變量,在第三個片段的內容會被賦給Id,這條路由可以匹配0-3個片段的URL 50 routes.MapRoute("", "{controller}/{action}/{Id}", new { controller = "Home", action = "Index", Id = "default" }); 51 //Id定義為可選參數,解析Url片段時,可選參數可以忽略,參數默認值一般在動作方法中設置 52 routes.MapRoute("", "{controller}/{action}/{Id}", new { controller = "Home", action = "Index", Id = UrlParameter.Optional }); 53 //定義可邊長路由,這是改變URL模式默認保守性的另一種方式 54 //用*號作為前綴,無論URL包含多少片段數,都將全部賦值給catcyall(自定義名稱) 55 routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}", new { controller = "Home", action = "Index", Id = UrlParameter.Optional }); 56 57 //按照命名空間區分控制器的優先級順序,在當有兩個控制器相同的情況下時,如果不做設置,將會報錯 58 //設置了命名空間後,遇到匹配的URL,則會優先尋找命名空間下的的控制器,找不到就會回歸正常行為 59 //命名空間可以設置多個,但都屬於同順序級別,如果出現重復控制器名稱,還是會報錯 60 Route myRoute = routes.MapRoute("MyRoute", "{controller}/{action}/{Id}/{*catcyall}", 61 new { controller = "Home", action = "Index", Id = UrlParameter.Optional }, 62 new[] { "命名空間名稱" }); 63 //此設置作用於在配置了命名空間優先級後,如果找不到該配置的命名空間,將禁止尋找其他命名空間的控制器 64 myRoute.DataTokens["UserNamespaceFallback"] = false; 65 } 66 //約束路由 67 { 68 //使用正則表達式約束路由,"^H.*"匹配所有controller變量值以H開頭的URL 69 routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}", 70 new { controller = "Home", action = "Index", Id = UrlParameter.Optional }, 71 new { controller = "^H.*" }); 72 //將一條路由 約束到一組指定的值,設置該約束,action只能匹配片段值是Index或者About 73 routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}", 74 new { controller = "Home", action = "Index", Id = UrlParameter.Optional }, 75 new { controller = "^H.*", action = "^Index$|^About$" }); 76 77 //使用Http方法約束路由,HttpMethodConstraint傳參類型是params類型,httpMethod是自定義名稱 78 routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}", 79 new { controller = "Home", action = "Index", Id = UrlParameter.Optional }, 80 new 81 { 82 controller = "^H.*", 83 action = "^Index$|^About$", 84 httpMethod = new HttpMethodConstraint("GET", "POST") 85 }); 86 //使用類型和值約束,RangeRouteConstraint限制Id值為10-20之間,更多類型約束,可以參考命名空間:System.Web.Routing 87 //也可以自定義約束,需要實現IRouteConstraint接口 88 routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}", 89 new { controller = "Home", action = "Index", Id = UrlParameter.Optional }, 90 new 91 { 92 controller = "^H.*", 93 action = "^Index$|^About$", 94 httpMethod = new HttpMethodConstraint("GET", "POST"), 95 Id = new RangeRouteConstraint(10, 20) 96 }); 97 } 98 } 99 } 100 }

學習完精通Asp.Net MVC5的URL路由章節的總結代碼

ASP.NET MVC5(一)—— URL路由