我這裡就是通過routes.MapRoute(參數)中的參數進行處理的。MapRoute的重載如下:
RouteTable.Routes.MapRoute( string name, string url);RouteTable.Routes.MapRoute( string name, string url, object defaults);RouteTable.Routes.MapRoute( string name, string url, string[] namespaces);RouteTable.Routes.MapRoute( string name, string url, object defaults, object constraints);RouteTable.Routes.MapRoute( string name, string url, object defaults, string[] namespaces);RouteTable.Routes.MapRoute( string name, string url, object defaults, object constraints, string[] namespaces);
name參數:規則名稱可以隨意取,但是不能重名,否則會報錯。路由集合中已經存在為“default”的路由。路由名必須是唯一的。
Url參數:url擷取資料的規則,這裡不是Regex,將要識別的參數括起來就可以了,比如{controller}/{action}
註:最少只需要傳遞name,url參數,就可以建立一條Routing規則。比如執行個體中可改為: RouteTable.Routes.MapRoute("Default", "{controller}/{action}");,
defaults參數:url參數中的預設值,如果一個URL只有controller:localhost /home/,而我們只建立了一條url擷取資料規則:{controller}/{action},這時就會為action參數設定defaults參數中規定的預設值,defaults是Object類型,可以傳遞一個匿名型別來初始化預設值。(action也就是index調用方法Userdetail())
new { controller = "Home", action = "Userdetail" });
constraints參數:用來限定每個參數的規則或Http請求的類型,constraints屬性是一個RouteValueDictionary對象,也就是一個字典代表,字典的值可以有兩種:a,用來定義Regex的字串,Regex不區分大小寫。B,用於實現IRouteConstraint介面且包含Match方法的對象。通過Regex可以規定參數格式,比如controller參數只能為4位元字:new {controller=@”\d{4}”}
public static void RegisterRoutes(RouteCollection routes) { //忽略對.axd檔案的Route,也就是和WebForm一樣直接去訪問.axd檔案 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.IgnoreRoute("{resource}.ashx/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults new { controller = @"^\b(?!GetRegSourceData)\w*\b$"} ); routes.Add(new ServiceRoute("GetRegSourceData", new WebServiceHostFactory(), typeof(GetRegSourceData))); }
查看以上代碼 其中new { controller = @"^\b(?!GetRegSourceData)\w*\b$"} 過濾掉Controller為GetRegSourceData的URI.
然後就會去匹配WCF Rest Service的Route
routes.Add(new ServiceRoute("GetRegSourceData", new WebServiceHostFactory(), typeof(GetRegSourceData)));