MVC路由引擎将相同格式的路由路由到不同的控制器操作

时间:2012-04-14 22:34:35

标签: asp.net-mvc-3 asp.net-mvc-routing

好的,我完成了我的作业并搜索了SO,确实我找到了类似的问题,但没有报告我正在接受的行为。

这是交易,我已经定义了一条路线:

routes.MapRoute("CategoryName", "Category/Name/{text}",
    new { controller = "Category", action = "Name", text = "" });

这里的扭曲如下:

此网址:http://www.url.com/Category/Name/existingCategoryName

网址:http://www.url.com/Category/Name/anotherExistingCategoryName

url的应该转到同一个控制器方法public ActionResult Name(string text),但遗憾的是第一个网址是默认的Index方法,第二个网址正确路由。

我想知道为什么会发生这种情况,因为我已经使用.net mvc好几年了,从未经历过这种行为。

这里有一些注意事项:

  • 由于它是不同方法的路径,我怀疑它们内部的代码与它有关。
  • 当手动将类别写入DB中不存在的类别作为类别名称时,它会通过Name方法。
  • 路线正确放置,因为我知道匹配该模式的第一条路线将获胜。
  • 即使我尝试先放置CategoryName路线,行为也一样。
  • Category/Index中编写每个链接时,我使用相同的@Html.RouteLink()帮助程序,因此所有链接的格式都相同。

提前致谢!

1 个答案:

答案 0 :(得分:0)

您是否在失败路线中使用-标志?

也许您可以使用Routing debugger

找到更多信息

也许你可以看看这个问题:Failing ASP.NET MVC route. Is this a bug or corner case?

Phil Haack还在ASP.NET routing: Literal sub-segment between tokens, and route values with a character from the literal sub-segment

中为您的问题提供了可能的答案