【发布时间】:2014-11-07 17:07:23
【问题描述】:
我在使用 MVC 5.2 时遇到属性路由错误。错误是
找到多个与 URL 匹配的控制器类型。如果多个控制器上的属性路由与请求的 URL 匹配,就会发生这种情况。
有问题的路线是
[Route("{classname}/{id:int}")]
[Route("Edit/{id:int}")]
url /Edit/123 会抛出错误,而 url /someword/123 不会抛出错误
鉴于 Edit/123 比 someword/123 更具体,为什么它会在 /Edit/123 上引发错误?
谢谢,
约翰
【问题讨论】:
-
如果
classname是Edit会发生什么? :) -
我当然可以改变路线。我的问题实际上是关于理解为什么它坏了。如果由于属性路由的设计导致路由不明确,我想了解为什么会这样,我的理解是更具体的路由将始终匹配。我相信,我可能错了,路由 /Edit/123 比 /Edit/{id:int} 更具体,后者比 /{name}/{id:int} 更具体。
-
Chris,所以错误是有多个路由匹配 /Edit/123?我认为它会找到精确的匹配并使用它,但如果它抛出路由直到只剩下一个,我就会明白这是多么模棱两可。
-
我只是将我的评论移到了答案中。是的,它会查找所有可能的匹配路由,如果找到多个路由,则会出现错误。属性路由比标准路由更挑剔一些,因为没有内在的顺序。在标准路由中,它只是自上而下读取路由配置,第一个匹配获胜。属性路由没有逻辑起点。
-
我即将尝试它,但可能是这里描述的自定义路由约束:blogs.msdn.microsoft.com/webdev/2013/10/17/… 我同意;这真是糟糕的设计。
标签: asp.net-mvc attributerouting