2015-04-20 61 views
2

我看過一些類似的帖子,但沒有一個是完全相同的,因爲在我的問題中,我想從網址,但控制器去除HOME控制器仍然是默認的(所以當我的網站從site.com/加載我的家庭控制器中的索引被激發)!如何刪除/家庭/但保持它作爲默認多控制器

我MVC4網站有多個控制器,如

首頁
產品
詳細
AndAnother
YetAnother

家庭控制器是我的默認控制器,並且是我的主頁生活,關於頁面,聯繫我們等

我想從URL中刪除HOME,但這仍然是我的默認c ontroller。所有其他控制器應保留與控制器名稱。

下不能正常工作,請注意默認的控制器「WhatControllerGoesHere」

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

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

如果我讓這兩個默認控制器回家,我無法導航到任何其他控制器

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

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

所以,我試圖達到的URL將是(我在哪裏關於和聯繫我們的視圖)

site.com/     //note, no Home/ 
site.com/about   //note, no Home/ 
site.com/contact   //note, no Home/ 
site.com/products/ 
site.com/products/other 
site.com/details/ 
site.com/details/other 
site.com/details/AndAnother 

我知道我可以爲每個控制器創建新的路由器,但我寧願儘量避免這種情況。

+0

你想真正'site.com/index'而而不是'site.com /'爲'HomeController'的'Index()'方法? –

+0

@StephenMuecke,不,更多關於顯示除HOME控制器以外的所有控制器的信息。我的帖子已更新 – MyDaftQuestions

回答

3

您所顯示的所有網址除了site.com/aboutsite.com/contact都將通過默認路由正確處理。要從aboutcontact URL刪除Home/前綴,你需要的默認前加2個特定的路由(假設你不需要一個id參數)

routes.MapRoute(
    name: "About", 
    url: "About", 
    defaults: new { controller = "Home", action = "About" } 
); 
routes.MapRoute(
    name: "Contact", 
    url: "Contact", 
    defaults: new { controller = "Home", action = "Contact" } 
); 
routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 
+1

只是一個更新:在MVC 5中,您還可以使用「屬性路由」。請參閱https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/ –