您可以使用asp-area 而不是asp-route。
Startup.cs
app.UseMvc(routes =>
{
routes.MapRoute(name: "out", template: "{area=Outbound}/{controller=Home}/{action=Index}");
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
控制器
[Area("Outbound")]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}
<a href="/outbound/home/index">Go to Outoing’ Home Page by href="/outbound/home/index"</a> <br>
<a asp-area="Outbound" asp-controller="Home" asp-action="Index">Go to Outoing’ Home Page by asp-area</a><br>
@Html.ActionLink("Go to Outoing’ Home Page by @Html.ActionLink", "Index", "Home", new { area = "Outbound" })
测试截图
asp-route
asp-route 属性用于创建直接链接到命名路由的 URL。使用路由属性,可以将路由命名为SpeakerController 中所示,并在其Evaluations 操作中使用:
[Route("/Speaker/Evaluations",
Name = "speakerevals")]
public IActionResult Evaluations() => View();
在以下标记中,asp-route 属性引用了命名路由:
<a asp-route="speakerevals">Speaker Evaluations</a>
Anchor Tag Helper 使用 URL /Speaker/Evaluations 直接生成到该控制器操作的路由。生成的 HTML:
<a href="/Speaker/Evaluations">Speaker Evaluations</a>
如果在asp-route 之外还指定了asp-controller 或asp-action,则生成的路由可能不是您所期望的。
为避免路由冲突,asp-route 不应与 asp-controller 和 asp-action 属性一起使用。
顺便说一句,default route 和 area route 根据调用它们的顺序自动为它们的端点分配一个顺序值。
asp-route 和 asp-controller 和 asp-action 之间的区别
路由名称(asp-route)可用于根据特定路由生成 URL。
同时,{controller}/{action} 还生成到Home 控制器和Test 动作的URL 映射。
//works
<a asp-controller="home" asp-action="test">asp-controller="home" asp-action="test"</a><br>
//works
<a asp-route="test">asp-route="test"</a><br>
//InvalidOperationException
<a asp-route="test" asp-controller="home" asp-action="test">asp-route="test" asp-controller="home" asp-action="test"</a>
InvalidOperationException 在一个<a> 标签中同时设置时出现。