2013-09-25 123 views
1

我研究了一個MVC示例我有一個控制器Home和一個動作索引。MVC路由:路由優先級不按預期工作

我有以下路由登記:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapRoute("MyRoute", "{controller}/{action}"); 

    routes.MapRoute("MyOtherRoute", "App/{action}", 
     new { controller = "Home" }); 
} 

我的理解,如果請求的路徑不匹配(或MATCH給出了一個空的結果?!),該框架將繼續在剩下的搜索的路線...

例如,如果我將導航到/App/Index,我希望我將被重定向到Home控制器的Index方法。

就是這樣,但只有在「MyRoute」被定義爲之後「MyOtherRoute」或「MyRoute」根本沒有。但如前所述,我得到了HTTP 404

這是爲什麼?

回答

2

MSDN發現了一些研究後:

當發生匹配時,沒有更多的路線進行評價。

顯然,沒有任何區別,如果那場比賽給了或不結果...

1

MVC正在驗證從頂部的路線,並且您的第一條路線對於/App/Index有效。它不檢查路由是否導致現有的控制器/操作。
您必須添加路線,以便更具體的路線在一開始,然後它會根據您的需要工作。

+0

它從頂部相匹配,但第一場比賽給出了一個空的結果(應用程序控制器不存在),因此它應該繼續搜索?! – Serge

+0

不,MVC不會繼續搜索,它會像顯示HTTP 404一樣。只是改變順序,它應該工作。 – Raidri

+0

正如我在問題中提到的那樣,更改訂單的工作原理,所以這不是問題。對我而言,如果一旦沒有比賽結果,系統會繼續搜索匹配,這樣會更好。 – Serge