2012-12-28 27 views
0

如果控制器上存在操作,那麼在嘗試處理任何自定義映射路由之前,asp.net-mvc是否會路由到該操作?在嘗試映射路由之前是否將現有操作路由到路由?

示例。

說我有以下控制器

public class ShopController : Controller 
{ 
    public ActionResult Shop(Category category) 
    { 
     // returns some result 
    } 

    public ActionResult CartItemCount() 
    { 
     // returns some result 
    } 
} 

而且我已經註冊了以下的路徑,在我的路由集合:如果我有以下URL

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapRoute(
     "Shop", 
     "Shop/{category}", 
     new { controller = "Shop", action = "Shop", category = UrlParameter.Optional } // Parameter defaults 
    ); 
} 

會發生什麼?
http://www.example.com/Shop/CartItemCount

編輯

我被認爲映射路由的名稱是有關它如何處理混淆自己。事實並非如此,當談到url匹配時,路由的名稱並不重要。

事實證明,我在示例中給出的另一條路線上方定義了另一條路線。這條路線,儘管命名不同,但卻得到了匹配。我甚至沒有想過要檢查它,因爲正如我所說的,我認爲給某條路線的名字會影響匹配。

+1

這取決於您已註冊的其他路線。路線在註冊順序上匹配。 – nemesv

+0

@nemesv這個評論讓我真正看看我的其他路線並找到問題。我編輯了這個問題來反映我的發現。謝謝!如果您想爲此插入答案,我會將其標記爲正確。 – jeremysawesome

回答

1

路由決定使用哪個動作。如果沒有定義路線,即使它存在,也不會執行任何操作。安裝RouteDebugger並關閉你的網址。它會告訴你它匹配的所有路線以及它實際使用的路線。

+0

如果我理解正確,則默認定義'{controller}/{action}/{id}'。所以即使我沒有定義任何特定路線,如果它們匹配默認路線,我仍然應該執行操作,對嗎?根據:http://msdn.microsoft.com/en-us/library/cc668201(v=vs.100).aspx#url_patterns – jeremysawesome

+0

@jeremysawesome。這是正確的。但是,如果您首先定義您的路線,它將覆蓋默認路線。安裝路由調試器並播放路由的順序。路由調試器會讓你知道哪些路由匹配,哪些路由將被使用。僅供參考 - 這聽起來像我正在推廣該工具 - 我不以任何方式附屬,它只是非常好。把我從大量的洞里拉出來。 –

+0

太棒了!我會看看RouteDebugger工具。謝謝你讓我知道:) – jeremysawesome