【问题标题】:Does an existing action get routed to before a mapped route is attempted?在尝试映射路由之前是否会路由现有操作?
【发布时间】:2012-12-28 21:05:00
【问题描述】:

如果控制器上存在操作,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
    );
}

如果我有以下网址会怎样?
http://www.example.com/Shop/CartItemCount

编辑

我以为映射路线的名称与它的处理方式有关,这让我自己感到困惑。不是这样的,当涉及到 url 匹配路由的名字时就无所谓了。

事实证明,我在示例中给出的路径之上定义了另一条路径。这条路线虽然名称不同,但正在匹配。我什至没有想过要检查它,因为正如我所说,我认为路由的名称会以某种方式影响匹配。

【问题讨论】:

  • 这取决于您注册了哪些其他路线。路由按注册顺序匹配。
  • @nemesv 此评论使我真正查看了我的其他路线并找到了问题。我已经编辑了这个问题以反映我的发现。谢谢!如果您想为此插入答案,我会将其标记为正确。

标签: c# asp.net asp.net-mvc routes asp.net-mvc-routing


【解决方案1】:

路由决定使用哪个动作。如果没有定义路由,即使存在,您也不会触发操作。安装RouteDebugger 并关闭您的网址。它会告诉你它匹配的所有路由以及它实际使用的路由。

【讨论】:

  • 如果我理解正确,{controller}/{action}/{id} 是默认定义的。因此,即使我没有定义任何特定路由,如果它们与默认路由匹配,我仍然应该点击操作,对吗?根据:msdn.microsoft.com/en-us/library/…
  • @jeremysawesome。这是正确的。但是,如果您先定义路线,它将覆盖默认路线。安装 Route Debugger 并使用路由的顺序。 Route Debugger 将告诉您哪些路线匹配,哪些路线将被使用。仅供参考 - 听起来我正在推广该工具 - 我没有任何关联,它真的很好。把我从很多洞里拉出来。
  • 太棒了!我将看一下 RouteDebugger 工具。谢谢你让我知道:)
猜你喜欢
  • 1970-01-01
  • 2016-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 2019-03-29
  • 2013-05-21
相关资源
最近更新 更多