我的ASP.NET Core项目中有两个基于用户类型的控制器。一个是AdminController
用于管理员,一个用于UserController
用户。登录和联系页面也有HomeController
。我正在为管理员和用户控制器使用以下地图路由配置。
config.MapRoute(
name: "UserRoute",
template: "{controller}/{username}/{action}",
defaults: new { controller = "User|Admin", action = "Dashboard" }
);
通过使用以上路线配置,我得到以下类型的网址
/User/user1
/Admin/user2
我不希望网址中有Admin
和User
部分,而是我想要
/user1
/user2
如何从网址中删除User
和Admin
部分?如果我从{controller}/{username}/{action}
删除控制器并仅在默认情况下指定控制器,则它仅适用于一个控制器。
答案 0 :(得分:1)
你不能拥有2个默认控制器的相同网址模板,因为mvc无法理解使用哪个控制器。
您可以拥有2条路线,每条路线都有/ Admin和/ User,就像这样:
config.MapRoute(
name: "UserRoute",
template: "User/{username}/{action}",
defaults: new { controller = "User", action = "Dashboard" }
);
config.MapRoute(
name: "AdminRoute",
template: "Admin/{username}/{action}",
defaults: new { controller = "Admin", action = "Dashboard" }
);
在Home控制器中,您可以检查用户角色并将其重定向到正确的路径。
另一种方法,只需要一条路线
config.MapRoute(
name: "UserRoute",
template: "{username}/{action}",
defaults: new { controller = "User", action = "Dashboard" }
);
但在此版本中,您将只有一个控制器,您可以根据用户角色启用或禁用操作