C# ASP.NETMVC核心2-区域路由
我正在尝试在ASP.NETMVCCore2应用程序中为管理员实现一个C# ASP.NETMVC核心2-区域路由,c#,asp.net-mvc,asp.net-core-2.0,C#,Asp.net Mvc,Asp.net Core 2.0,我正在尝试在ASP.NETMVCCore2应用程序中为管理员实现一个区域 我已将该区域的路线配置如下: // Default route app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); // Admin area route app.UseMvc(routes =&
区域
我已将该区域的路线配置如下:
// Default route
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
// Admin area route
app.UseMvc(routes =>
{
routes.MapRoute(
name: "admin",
template: "{area=Admin}/{controller=Home}/{action=Index}/{id?}");
});
http://localhost/Admin/Account/Index
http://localhost/Admin/Shopping/Basket
http://localhost/Admin/Admin/Users
这一切都很有效
此管理员区域
使用与主网站相同的布局
,尽管\u ViewStart.cshtml
位于区域/Admin/Views
目录中,但仍然可以正常工作
我遇到的问题是,主站点布局文件中有一个导航菜单组件,所有锚中的href
链接在管理区域内指向错误的URL
假设我有以下链接:
<a asp-controller="Account" asp-action="Index">My Account</a>
<a asp-controller="Shopping" asp-action="Basket">Shopping Basket</a>
<a asp-controller="Admin" asp-action="Users">Manage Users</a>
有没有什么好方法可以使所有这些链接都与站点根目录相关?您可以编辑模板,将URL显示为首选。i、 e.改为
template: "{controller=Home}/{action=Index}/{id?}");
您可以编辑要显示为首选URL的模板。i、 e.改为
template: "{controller=Home}/{action=Index}/{id?}");
如何在应用程序中设置有几个问题
app.UseMvc()
两次。我想基本上最后一个会覆盖你的第一个设置。这就是为什么所有链接都有/admin
区域前缀管理
区域下生成指向用户管理的链接时,您应该使用asp区域
,如管理用户
//我的习惯是始终使用锚定标记帮助器指定区域。
//对于公共链接(不在任何区域下):
//我只是传递空字符串,如asp area=“”
//对于指向任何区域下任何控制器的链接:
//只需通过该区域,如asp area=“admin”
// http://localhost/account
我的帐户
// http://localhost/shopping/basket
购物筐
// http://localhost/admin/user
管理用户
// http://localhost/admin/dashboard
管理面板
如何在应用程序中设置有几个问题
app.UseMvc()
两次。我想基本上最后一个会覆盖你的第一个设置。这就是为什么所有链接都有/admin
区域前缀管理
区域下生成指向用户管理的链接时,您应该使用asp区域
,如管理用户
//我的习惯是始终使用锚定标记帮助器指定区域。
//对于公共链接(不在任何区域下):
//我只是传递空字符串,如asp area=“”
//对于指向任何区域下任何控制器的链接:
//只需通过该区域,如asp area=“admin”
// http://localhost/account
我的帐户
// http://localhost/shopping/basket
购物筐
// http://localhost/admin/user
管理用户
// http://localhost/admin/dashboard
管理面板
我已更新我的问题,将默认路线包括在内。这已经在Configure
method中设置好了。您不是要为管理部分更改路线吗?我是否需要在管理区域中将您的模板建议添加为路线配置?我已更新了我的问题,以包括默认路线。这已经在配置方法中设置好了。您是否要更改路线?我是否需要在管理区域内添加您的模板建议作为路线配置?谢谢-您的评论非常有用。你是正确的,我不能多次使用app.useMvc
,但是以下方法确实有效:app.useMvc(routes=>{routes.MapRoute(name:“default”,template:{controller=Home}/{action=Index}/{id?}”);routes.MapRoute(name:“admin”,template:{area=admin}/{controller=Home}/{action=Index}/{id?}“;})
保持紧密联系。我正在向您展示如何正确操作!同样,设置路由的顺序很重要!您可以阅读我在上面的编码示例中的注释。您的答案非常完美,完全符合预期。我一直在实现它,因为您一直在更新帖子,但它非常有效。非常感谢您感谢!谢谢你-你的评论非常有用。你是正确的,我不能多次使用app.useMvc
,但以下方法确实有效:app.useMvc(routes=>{routes.MapRoute(name:“default”,模板:{controller=Home}/{action=Index}/{id?});routes.MapRoute(名称:“admin”,模板:{area=admin}/{controller=Home}/{action=Index}/{id?}”);})
保持紧密联系。我正在向您展示如何正确操作!同样,设置路由的顺序很重要!您可以阅读我在上面的编码示例中的注释。您的答案非常完美,完全符合预期。我一直在实现它,因为您一直在更新帖子,但它非常有效。非常感谢您谢谢!
// Assume you have an Admin area under /Areas/Admin
namespace DL.SO.Web.UI.Areas.Admin.Controllers
{
[Area("admin")]
public abstract class AdminControllerBase : Controller
{
}
}
// Dashboard controller. I know you have home controller inside
// your admin area but they should work the same.
namespace DL.SO.Web.UI.Areas.Admin.Controllers
{
public class DashboardController : AdminControllerBase
{
public IActionResult Index()
{
return View();
}
}
}
// Users controller. I know you have User(s) controller but I usually
// just keep the name of the controller singular.
namespace DL.SO.Web.UI.Areas.Admin.Controllers
{
public class UserController : AdminControllerBase
{
public IActionResult Index()
{
return View();
}
}
}
// My habit is to always specify the area with the anchor tag helper.
// For public links (those are not under any areas):
// I just pass empty string, like asp-area=""
// For links pointing to any controller under any area:
// Just pass the area, like asp-area="admin"
// http://localhost/account
<a asp-area="" asp-controller="account" asp-action="index">My Account</a>
// http://localhost/shopping/basket
<a asp-area="" asp-controller="shopping" asp-action="basket">Shopping Basket</a>
// http://localhost/admin/user
<a asp-area="admin" asp-controller="user" asp-action="index">Manage Users</a>
// http://localhost/admin/dashboard
<a asp-area="admin" asp-controller="dashboard" asp-action="index">Admin Panel</a>