自定義路由一定要在默認路由上面
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // 路由名稱 "{controller}/{action}/{id}", // 帶有參數的 URL new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數默認值 );
上面是一個默認的路由,有路由名字那么代表一定是允許有多個路由的。
在MVC中,自定義的路由一定要寫在默認的路由上面,這樣才能起作用。
如下,代碼:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "自定義路由", // 路由名稱 "{controller}/{action}/{id}", // 帶有參數的 URL new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數默認值 );
但是里面 {controller}/{action}/{id} 卻跟默認的路由是一樣的
如果這樣寫,那簡直是木有效果的。 要記住一點 大括號 {} 就是代表里面的東西是可有可無的。
所以可以改成 如下:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "自定義路由", // 路由名稱 "controller/{action}/{id}", // 帶有參數的 URL new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數默認值 );
這樣寫,代表着控制器是必須寫的。。
當你訪問一個網址,沒有寫控制器,那么就會跳到默認的第二個路由,也就是默認路由那里。
當你有地址有寫路由,那么程序從頭往下去找路由,找到第一個,發現匹配,那么就會根據它跳轉到對應的action