C# ASP.NET MVC路由冲突

C# ASP.NET MVC路由冲突,c#,asp.net,asp.net-mvc,asp.net-mvc-routing,C#,Asp.net,Asp.net Mvc,Asp.net Mvc Routing,我的应用程序中有两条路由,每条路由位于不同的控制器中,如下所示: [Route("forgot-password", Order = 1)] [Route("{variable}", Order = 2)] 运行应用程序时,会出现异常: 找到多个与URL匹配的控制器类型。这个可以 如果多个控制器上的属性路由与请求的 网址 请记住,这些操作在不同的控制器中。Order属性在控制器上似乎不起作用 如何使此场景在asp.net mvc路由中运行?我想使用基于属性的路由,我不想更改我的URL 解释了错

我的应用程序中有两条路由,每条路由位于不同的
控制器中,如下所示:

[Route("forgot-password", Order = 1)]
[Route("{variable}", Order = 2)]
运行应用程序时,会出现异常:

找到多个与URL匹配的控制器类型。这个可以 如果多个控制器上的属性路由与请求的 网址

请记住,这些操作在不同的
控制器中。
Order
属性在
控制器上似乎不起作用


如何使此场景在
asp.net mvc路由中运行?我想使用基于属性的路由,我不想更改我的URL

解释了错误背后的机制(我猜您使用的是Web API)。简而言之,优先级仅在控制器内部得到尊重

此外,我不清楚您为什么需要这样一条通用路线,如:

[Route("{variable}")]

问题是应用程序中的所有路由都存储在一起。即使它位于不同的控制器中,它也是相同的类型,因此它们可以相互“看到”。在您的例子中,“忘记密码”和“{variable}”具有相同的格式,这就是为什么显示关于多个路由的错误。正如@NightOwl888所说,您可以使用RouteConfig创建路由,但在这种情况下,您必须更改路由值。

是否可以将第二条路由配置为实际包含令牌?例如:[Route(“some action/{variable}”)]?不。我希望我的URL是我希望的。我使用的是MVC,而不是WebApi。如果你有一个卖车的网站怎么办?mywebsite.com/ford和mywebsite.com/toyota似乎是合理的URL。我理解错误背后的机制,但我完全不相信asp.net路由无法处理这种情况。其他基于属性的路由库只允许您指定一个Order参数来解决冲突。@BowserKingKoopa-支持此方案。使用.NET路由时,路由属性不是最灵活的机制。相反,您可以尝试处理更复杂的场景,例如。您甚至可以基于上下文的其他部分而非URL(例如cookie、会话或表单值)进行路由。另一种选择(更简单)是使用
MapRoute
将路由放入
RouteConfig.cs
文件中。这是一种复杂的场景吗?我使用过的所有其他基于属性的路由库都很容易支持这一点。Order值应该可以解决冲突。订单值在控制器之间不起作用的想法太愚蠢了,不可能是真的,对此我仍然否认。