.NET Core 2.0 从区域路由到非区域的正确方法
.NET Core 2.0 Correct way to route from area to nonarea
我有一个 .NET Core 2.0 MVC 应用程序,其中包含一个名为 admin 的区域。
- 地区
- 管理员
- 观看次数
- 首页
- Index.cshtml
- 控制器
- HomeController.cs
- 控制器
- HomeController.cs
- ManageController.cs
- 观看次数
- 首页
- Index.cshtml
- 管理
- Index.cshtml
我想要 _Layout.cshtml 中的路由,例如 /controllers/manage/index,当不在某个区域时和在管理区域时都可以使用。使用 HtmlHelper 语法或 TagHelper 语法如何创建它?
期望的输出:
www.website.com/manage
我试过了
<a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Manage</a>
不在某个区域时有效,但在管理区域时会产生 link 到:
www.website.com/admin
我在 Startup Configure(IapplicationBuilder app) 中注册了以下路由
// Route for areas
app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});
// Default route
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
问题是您注册了两次 MVC。
// Route for areas
app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});
// Default route
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
在这种情况下,最后一次注册会覆盖第一个,因此您实际上只注册了 1 条路线(区域没有路线)。
要解决此问题,您只需注册 MVC 一次并将所有路由放入该实例中。
app.UseMvc(routes =>
{
// Route for areas
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
// Default route
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
我有一个 .NET Core 2.0 MVC 应用程序,其中包含一个名为 admin 的区域。
- 地区
- 管理员
- 观看次数
- 首页
- Index.cshtml
- 首页
- 控制器
- HomeController.cs
- 观看次数
- 管理员
- 控制器
- HomeController.cs
- ManageController.cs
- 观看次数
- 首页
- Index.cshtml
- 管理
- Index.cshtml
- 首页
我想要 _Layout.cshtml 中的路由,例如 /controllers/manage/index,当不在某个区域时和在管理区域时都可以使用。使用 HtmlHelper 语法或 TagHelper 语法如何创建它?
期望的输出:
www.website.com/manage
我试过了
<a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Manage</a>
不在某个区域时有效,但在管理区域时会产生 link 到:
www.website.com/admin
我在 Startup Configure(IapplicationBuilder app) 中注册了以下路由
// Route for areas
app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});
// Default route
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
问题是您注册了两次 MVC。
// Route for areas
app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});
// Default route
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
在这种情况下,最后一次注册会覆盖第一个,因此您实际上只注册了 1 条路线(区域没有路线)。
要解决此问题,您只需注册 MVC 一次并将所有路由放入该实例中。
app.UseMvc(routes =>
{
// Route for areas
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
// Default route
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});