ASP.NET核心中的路由

时间:2016-10-12 09:25:36

标签: asp.net asp.net-mvc asp.net-core asp.net-core-mvc asp.net-core-1.0

我的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

我不希望网址中有AdminUser部分,而是我想要

/user1
/user2

如何从网址中删除UserAdmin部分?如果我从{controller}/{username}/{action}删除控制器并仅在默认情况下指定控制器,则它仅适用于一个控制器。

1 个答案:

答案 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" }
);

但在此版本中,您将只有一个控制器,您可以根据用户角色启用或禁用操作