相当简单的问题。
<a asp-controller="Guide" asp-action="Index" asp-route-title="@Model.Title">Read more</a>
生成链接 /指南?title = Guide_no_1 ,但它应该生成链接 / Guide / Guide_no_1 / < /强>
我可以找到的文档都指定它应该输出 / Guide / Guide_no_1 / 所以我觉得我错过了一些东西,一个设置或一些属性某处。
我拥有的路线是这样的,只是因为它们对链接创建有影响
[Route("/Guide/")]
public IActionResult Index() { ... }
[Route("/Guide/{title}/{page?}/")]
public IActionResult Index(string title, int page = 0) { ... }
[Route("/Guide/OnePage/{title}/")]
public IActionResult Index(string title) { ... }
答案 0 :(得分:4)
您需要指定属性路线的顺序。
您需要订购路线,以便首先评估最具体的路线。在属性路由的情况下,您将使用订单参数:
执行此操作[Route("Guide/OnePage/{title}/", Order = 1)]
public IActionResult Index(string title) { ... }
[Route("Guide/{title}/{page?}/", Order = 2)]
public IActionResult Index(string title, int page = 0) { ... }
[Route("Guide/", Order = 3)]
public IActionResult Index() { ... }
现在您会注意到,参与指南/ OnePage / {title} / 和指南/ {title} / {page?} / <的2条路线也存在问题/ strong>即可。由于它们具有相同的控制器,动作和所需参数,因此MVC无法区分它们,并且首先订购的那个将永远赢得!
或者将特定的路由名称分配给始终丢失的路由名称,以便您可以使用该名称创建链接:
[Route("Guide/{title}/{page?}/", Name = "titleAndPage", Order = 2)]
public IActionResult Index(string title, int page = 0) { ... }
<a asp-route="titleAndPage" asp-route-title="fooTitle">Read more</a>