我有以下路线:
[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
之类的东西也可以。