Asp.net mvc MVC路线冲突似乎很奇怪

Asp.net mvc MVC路线冲突似乎很奇怪,asp.net-mvc,model-view-controller,routes,Asp.net Mvc,Model View Controller,Routes,我正在使用MVC5.1和AutoFac 我不明白为什么来自每个控制器的以下路由与此URL冲突: 我认为它会映射到第一种方法。但我得到了这个错误: 找到多个与URL匹配的控制器类型。如果多个控制器上的属性路由与请求的URL匹配,则可能发生这种情况 请求已找到以下匹配的控制器类型: AllThings.WebUI.Controllers.AccountController AllThings.WebUI.Controllers.PostController 主要问题是,您有3个可能的路由可以匹配/

我正在使用MVC5.1和AutoFac

我不明白为什么来自每个控制器的以下路由与此URL冲突:

我认为它会映射到第一种方法。但我得到了这个错误:

找到多个与URL匹配的控制器类型。如果多个控制器上的属性路由与请求的URL匹配,则可能发生这种情况

请求已找到以下匹配的控制器类型: AllThings.WebUI.Controllers.AccountController AllThings.WebUI.Controllers.PostController



主要问题是,您有3个可能的路由可以匹配
/Home/Login

[Route("~/{site}/Login")]
[Route("~/Account/Login")]
[Route("~/{site}/{CategoryUrl?}")]
随意使用占位符,尤其是URL模板定义中的占位符,并不是一件好事。您应该在URL中使用文本,或者如果您使用占位符,则应该对它们进行约束,以使它们不会冲突

请注意,以下路由也存在冲突:

[Route("~/{country:maxlength(2)}/{site}/Login")]
[Route("~/{country:maxlength(2)}/Account/Login")]
[Route("~/{country:maxlength(2)}/{site}/{CategoryUrl?}", Name = "ResultList")]
其中任何一个都可以匹配
UK/Account/Login

[Route("~/{site}/Login")]
[Route("~/Account/Login")]
[Route("~/{site}/{CategoryUrl?}")]
此外,使用波浪号(
~
)可以覆盖路由前缀(请参阅)。如果您的控制器没有定义一个,您应该从第一个段或占位符开始