Tho*_*ian 5 asp.net-mvc asp.net-core-mvc asp.net-core
相当简单的问题。
<a asp-controller="Guide" asp-action="Index" asp-route-title="@Model.Title">Read more</a>
Run Code Online (Sandbox Code Playgroud)
产生链接/Guide?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) { ... }
Run Code Online (Sandbox Code Playgroud)
您需要指定属性路由的顺序。
您需要对路线进行排序,以便首先评估最具体的路线。在属性路由的情况下,您将使用Order参数来执行此操作:
[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() { ... }
Run Code Online (Sandbox Code Playgroud)
现在您会注意到,参数Guide/OnePage/{title}/和Guide/{title}/{page?}/ 的2 条路由也存在问题。由于它们具有相同的控制器、操作和所需参数,因此 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>
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
1625 次 |
最近记录: |