2013-12-17 117 views
2

我希望用戶能夠使用「/ Linecard」或「/ Manufacturers」作爲URL訪問我的ASP.Net MVC網站的「/ Linecard」頁面...所以同一控制器,2個不同的可能的URL。MVC:多路由1控制器

我嘗試添加以下內容:

routes.MapRoute(
     name: "Manufacturers", 
     url: "Manufacturers/{action}/{id}", 
     defaults: new { controller = "Linecard", action = "Index", id = UrlParameter.Optional } 
    ); 

添加這種「默認」路線後都不能正常工作,我得到一個404錯誤,當我去「/製造商」。把它放在「Default」之前的作品中,但是當我點擊菜單鏈接時,只有「/ Manufacturers」出現在URL中,因爲它是第一個匹配。我希望「/ Linecard」始終顯示爲網址。

任何指針?我可以用來完成這個限制嗎?謝謝!

回答

4

當我們移動到無擴展名的URL時,我遇到了同樣的問題。我們需要繼續支持帶有擴展名的一條路線。我周圍有通過讓我默認路由適用於一切,除了舊的URL,然後後映射一個專爲例外

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    // if controller specified does not match 'manufacturers' (case insensitive) 
    new { controller = "^((?i)(?!manufacturers).)*$" }, 
    new string[] { "Namespace.Of.Controllers" } 
); 

routes.MapRoute(
    "Manufacturers", // Route name 
    "Manufacturers/{action}/{id}", // URL with parameters 
    new { controller = "Linecard", action = "Index", id = UrlParameter.Optional }, 
    new string[] { "Namespace.Of.Controllers" } 
); 
+0

非常好......那正是我想要的。謝謝! –

0

末像映射與默認的路由時,您還可以設置一個訂單所以

routes.MapRoute(
    name: "Manufacturers", 
    url: "Manufacturers/{action}/{id}", 
    defaults: new { controller = "Linecard", action = "Index", id = UrlParameter.Optional } 
); 

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
);