带参数的属性路由 - Anchor Tag Helper 附加 Route-Id 值
Attribute Routing With Parameters - Anchor Tag Helper Appending Route-Id Value
我在 Startup.cs 中设置了“基本”路线,没有任何异常(一条用于标准路线,另一条用于区域)。它们如下:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "Areas",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
现在,有了这两个,我可以导航(尽管是手动)到我想要的路线。下面是我对一个动作的属性路由:
[Route("Admin/Artists/{artistId:int}/Albums")]
public async Task<IActionResult> Albums(int artistId)
{
var albums = await Mediatr.Send(new GetAlbumsForArtistRequest { ArtistId = artistId });
return View(albums);
}
我可以成功浏览到该路线 (尽管是手动) 并且会出现我的视图。然后我尝试使用锚标记助手:
<a asp-area="Admin" asp-controller="Artists" asp-action="Albums" asp-route-artist-id="@ViewData["ArtistId"]" class="btn btn-info">Albums</a>
生成的URL不正确(并抛出异常,因为此路由未定义):
/Admin/Artists/Albums
当正确的 URL 应该是:
/Admin/Artists/558/Albums
我曾尝试在 Anchor Tag Helper documentation 上寻求任何帮助,但没有任何帮助。
the correct URL should be: /Admin/Artists/558/Albums
在您的代码中,我们发现您为 Anchor Tag Helper 指定了 asp-route-artist-id="@ViewData["ArtistId"]"
,这导致了问题。
请去掉artist
和id
之间的-
,应该是asp-route-artistid
.
测试结果
我在 Startup.cs 中设置了“基本”路线,没有任何异常(一条用于标准路线,另一条用于区域)。它们如下:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "Areas",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
现在,有了这两个,我可以导航(尽管是手动)到我想要的路线。下面是我对一个动作的属性路由:
[Route("Admin/Artists/{artistId:int}/Albums")]
public async Task<IActionResult> Albums(int artistId)
{
var albums = await Mediatr.Send(new GetAlbumsForArtistRequest { ArtistId = artistId });
return View(albums);
}
我可以成功浏览到该路线 (尽管是手动) 并且会出现我的视图。然后我尝试使用锚标记助手:
<a asp-area="Admin" asp-controller="Artists" asp-action="Albums" asp-route-artist-id="@ViewData["ArtistId"]" class="btn btn-info">Albums</a>
生成的URL不正确(并抛出异常,因为此路由未定义):
/Admin/Artists/Albums
当正确的 URL 应该是:
/Admin/Artists/558/Albums
我曾尝试在 Anchor Tag Helper documentation 上寻求任何帮助,但没有任何帮助。
the correct URL should be:
/Admin/Artists/558/Albums
在您的代码中,我们发现您为 Anchor Tag Helper 指定了 asp-route-artist-id="@ViewData["ArtistId"]"
,这导致了问题。
请去掉artist
和id
之间的-
,应该是asp-route-artistid
.
测试结果