ASP.NET内核中的路由

ASP.NET内核中的路由,asp.net,asp.net-mvc,asp.net-core,asp.net-core-mvc,asp.net-core-1.0,Asp.net,Asp.net Mvc,Asp.net Core,Asp.net Core Mvc,Asp.net Core 1.0,在我的ASP.NET核心项目中,我有两个基于用户类型的控制器。一个是管理员的AdminController,另一个是用户的UserController。还有登录和联系页面的HomeController。我正在为管理员和用户控制器使用以下映射路由配置 config.MapRoute( name: "UserRoute", template: "{controller}/{username}/{action}", defaults: new { controlle

在我的ASP.NET核心项目中,我有两个基于用户类型的控制器。一个是管理员的
AdminController
,另一个是用户的
UserController
。还有登录和联系页面的
HomeController
。我正在为管理员和用户控制器使用以下映射路由配置

config.MapRoute(
      name: "UserRoute",
      template: "{controller}/{username}/{action}",
      defaults: new { controller = "User|Admin", action = "Dashboard" }
);
通过使用上面的路由配置,我得到了以下类型的URL

/User/user1
/Admin/user2
我不想要URL中的
管理员
用户
部分,而是我想要的

/user1
/user2

如何从URL中删除
用户
管理员
部分?如果我从
{controller}/{username}/{action}
中删除控制器,并在默认值中只指定一个控制器,那么它只适用于一个控制器。

您不能将同一URL模板与两个默认控制器一起使用,因为mvc不了解要使用哪个控制器

您可以有两个路由,每个路由都带有/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" }
);
从主控制器,您可以检查用户角色并将其重定向到正确的路由

另一种方法是根据您的需要选择一条路线

config.MapRoute(
      name: "UserRoute",
      template: "{username}/{action}",
      defaults: new { controller = "User", action = "Dashboard" }
);

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

检查类似问题:。您可以在附加的
MapRoute
上使用路由约束,而不影响默认路由。当我使用
RedirectToAction(actionname,controllername)
时,我不是在告诉MVC要使用哪个控制器吗?因为我在重定向到页面时指定了控制器。我将
admin
user
分别放在不同的控制器中,因为它们几乎没有相似的功能,如果我只创建一个
UserController
并在该控制器中维护所有类型的用户,那么就很难维护。在
RedirectToAction
中,您告诉MVC要使用哪个控制器使用,因为它是一个参数,当用户登录时,您已经知道要使用哪个控制器,Admin to user。无论如何,我看到大多数网站的用户和管理员都有不同的URL,在MVC中,我通常为管理员创建一个区域,甚至可能创建一个单独的母版页。我在各自的视图文件夹中为
User
Admin
创建了不同的母版页。我想从url中删除角色,因为任何人只要检查url就可以知道用户的类型。我想我只需要创建一个
UserController
并在其中处理用户类型,但为所有用户类型保留不同的视图和母版页。您可以从用户角色中删除用户/用户,并仅为管理员角色保留/Admin,因为除了管理员之外,没有人会看到此角色,这是我在开发的任何web应用程序中通常做的事情