ASP.NET Core asp路由-*帮助程序未正确呈现链接



我有以下路线:

[HttpGet("symbols/{symbol}/{slug}/news")]
public async Task<IActionResult> News(
[FromRoute] string symbol,
[FromRoute] string slug,
[FromQuery] int perPage,
[FromQuery] int page)
{
...
}

路线应该类似于symbols/aapl/apple-inc/news。现在,我还想包括分页,比如symbols/aapl/apple-inc/news?page=2&perPage=20。因此,symbol和slug是[FromRoute],page和perPage是[FromQuery]

在我看来,我有以下链接:

@for (...)
{
<a class="page-link"
asp-action="News"
asp-controller="Symbols"
asp-route-symbol="@Model.Symbol.ToLower()"
asp-route-slug="@Model.CompanyNameSlug"
asp-route-page="@i"
asp-route-perPage="@Model.PerPage">
@i
</a>
}

然而,这使得使用符号和段塞作为查询参数的链接呈现不正确:symbols/news?symbol=aapl&slug=aapl-inc&page=11&perPage=5

如何将此链接渲染为symbols/aapl/apple-inc/news?page=2&perPage=20

这里有一个类似以下的解决方法:

app.UseEndpoints(endpoints =>
{               
endpoints.MapControllerRoute(
name: "default1",
pattern: "{controller=Home}/{symbol?}/{slug?}/{action=Index}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});

更新:

我找到了另一种方法,不要使用asp-route-page。这似乎与剃刀页面中的asp-page之类的东西有冲突,更改为asp-route-fPage之类的东西也可以。

最新更新