2011-02-28 33 views
3

在ASP.net MVC的默認路由如下:MVC路線 - 避免多個URL的相同位置

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

這意味着我可以達到多種方式的HomeController/Index操作方法:

http://localhost/home/index 
http://localhost/home/ 
http://localhost/ 

如何避免在同一個動作中有三個URL?

回答

4

如果你只是想:

http://localhost/ 

則:

routes.MapRoute(
    "Default", 
    "", 
    new { controller = "Home", action = "Index" } 
); 

如果你只是想:

http://localhost/home/ 

則:

routes.MapRoute(
    "Default", 
    "home", 
    new { controller = "Home", action = "Index" } 
); 

,如果你想只:

http://localhost/home/index 

則:

routes.MapRoute(
    "Default", 
    "home/index", 
    new { controller = "Home", action = "Index" } 
); 
+0

所以我需要有每個控制器個別路線我想做到這一點的? – Dismissile 2011-02-28 20:49:05

+0

@Dismissile,如果你期望像這樣推斷urls,你不能擁有多個控制器。或者如果你想,那麼你需要明確地定義它們。 – 2011-02-28 20:51:53

+0

是否值得從SEO的角度來做到這一點呢?我認爲將多個網址指向相同內容並不好? – Dismissile 2011-02-28 20:54:22

1

您所看到的默認值踢

擺脫了控制器的默認值。和行動。

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

這將使控制器&中的用戶類型操作。

+0

忘了提及我想要一個且只有一個URL是http:// localhost /的HomeController。 http:// localhost/test for TestController。基本上,最短的URL可能。 – Dismissile 2011-02-28 20:48:34

+0

嗯......那麼再與@ darin-dimitrov的答案混合起來。例如,第一個爲家庭,然後做第二個樣本作爲第二個樣本。 – klabranche 2011-02-28 20:58:17

+0

正如@ darin-dimitrov所說,通過這樣做獲得的SEO優勢可能不值得。 :-) – klabranche 2011-02-28 20:59:17

0

我不假設你正在爲SEO做這件事嗎?谷歌懲罰你的重複內容,所以值得一些思考。

如果是這種情況,路由不是解決問題的最佳方式。您應該在首頁的<head>中添加規範鏈接。因此,將<link href="http://www.mysite.com" ref="canonical" />放置在您的Views/Home/Index.aspx頁面的頭部以及任何網址搜索引擎訪問您的首頁時,所有SEO值都將歸於規範鏈接中引用的網址。

更多信息:about the canonical tag

我去年寫了一篇關於SEO concerns from a developer perspective太多,如果你正在尋找這種東西