在尝试映射路由之前,是否将现有操作路由到

本文关键字:路由 操作 是否 映射 | 更新日期: 2023-09-27 17:50:13

如果控制器上存在一个动作,asp.net-mvc在尝试处理任何自定义映射路由之前是否路由到该动作?

的例子。

假设我有以下控制器

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

我已经在我的路由集合中注册了以下路由:

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

如果我有以下URL会发生什么?
http://www.example.com/Shop/CartItemCount

编辑

我把自己弄糊涂了,以为映射路由的名称与它的处理方式有关。但事实并非如此,当涉及到url匹配路由名称时,这并不重要。

结果是,我在示例中给出的路由之上定义了另一个路由。这条路线,虽然命名不同,但正在匹配。我甚至没有想到要检查它,因为,正如我所说的,我认为路由的名称会以某种方式影响匹配。

在尝试映射路由之前,是否将现有操作路由到

路由决定使用哪个操作。如果没有定义路由,即使它存在,你也不会命中动作。安装RouteDebugger并启动你的url。它会告诉你它匹配的所有路由,以及它实际使用的路由。