2016-07-26 100 views
0

我在routeconfig.cs中創建了兩種不同的地圖路由。ASP.NET MVC中的自定義路由

// case 1 
routes.MapRoute("Default2","{x}", new {controller = "Home", action = "Index"}); 
// case 2 
routes.MapRoute("Default3","{controller}", new {controller = "Home", action = "Index"}); 

的問題是,如果我使用殼體1和輸入是example.com那麼即使默認的控制器和用於在殼體2和輸入提供

url模式不匹配是example.com它觸發默認控制器和行動。爲什麼會發生?

我相信必須發生情況1也可能是什麼原因?任何幫助是極大的讚賞。

+0

請記住,MVC路由從上到下計算,因此使用x參數的路由將在默認控制器之前首先評估。如果你想要x的默認值,把'new {x ='Home'}'放在你的參數默認值中。 –

回答

0

在這種情況下:

// case 1 
routes.MapRoute("Default2","{x}", new {controller = "Home", action = "Index"}); 

您還沒有爲佔位符{x}限定的默認值,因此該路線要求正好1段以匹配(其可以包含任何值) URL。所以它將匹配/foo/bar,但不匹配//foo/bar

在這種情況下:

// case 2 
routes.MapRoute("Default3","{controller}", new {controller = "Home", action = "Index"}); 

提供了{controller}默認值時,在URL中沒有提供它其生效。因此,它將匹配URL /,並且將在此情況下路由到HomeController.Index方法。