【问题标题】:Routing in MVC4 ApplicationMVC4 应用程序中的路由
【发布时间】:2013-10-18 03:36:28
【问题描述】:

我正在寻找一种基于用户在 MVC4 应用程序中的角色来路由用户的最佳方法。

基本上我的应用程序中有 3 种类型的用户

1)管理员 2)员工 3)客户

我怎样才能做到这一点?

admin/home (for each admin request it starts with admin/{controller}....)
staff/home  (for each staff request it starts with staff/{controller}....)
client/home  (for each client request it starts with client/{controller}....)

谢谢。

【问题讨论】:

  • 看起来我必须在我的应用程序中使用不同的区域。不是吗?如果是这样,我想知道是否有任何其他方法可以显式定义路由而不是使用区域。但如果可能的话,我不知道该怎么做。
  • 嗯,在某些时候,您将不得不对用户进行身份验证。因此,另一种选择是在您的登录控制器中,然后根据他们的角色重定向它们。
  • 同意!但同时我想向管理员/员工/客户呈现不同的登录视图。在他们登录后,我希望他们重定向到他们指定的路线。例如:如果管理员登录,它将重定向到 /admin/home 之类的地址
  • 这似乎有点奇怪,在您对他们进行身份验证之前,您不知道它是什么类型的访问者。要完成不同的登录视图,您必须告诉每个用户专门去一个 URL (adim/login) 登录,而不是只有一个入口点,然后他们路由到一个登录页面。

标签: asp.net-mvc asp.net-mvc-areas


【解决方案1】:

3) 您可以在控制器中的操作前面放置一个属性,因此您可以在此处列出该特定操作允许的角色类型。您还可以创建自己的过滤器。

【讨论】:

    【解决方案2】:

    这就是我的建议,创建一个新项目并使用“互联网模板”。他们开箱即用地为您设置了一个登录页面,这将使您了解如何在您自己的应用程序中进行设置。

    根据上面的设置,您需要编辑 AccountController 并将类似的内容添加到登录帖子操作中。

     if (User.IsInRole("Admin"))
     {
         return RedirectToAction("Home", "AdminController");
     }
     if (User.IsInRole("Staff"))
     {
         return RedirectToAction("Home", "StaffController");
     }
     if (User.IsInRole("Client"))
     {
         return RedirectToAction("Home", "ClientController");
     }
    

    别忘了给四个控制器加上[Authorize(Roles = "RoleName")]属性,否则登录与否都无所谓。

    另外,请查看http://www.asp.net/mvc,他们有大量资源可用于学习 asp.net mvc。

    【讨论】:

    • 好的,知道了。但正如我所说,我希望请求 url 应该是 (admin/...)。那么,我必须在 AdminController 中进行所有操作吗?我不能做更多的控制器吗?我想,如果我创建单独的控制器,那么请求 url 将不会像我想要的那样。
    • 开箱即用的路由工作方式是/{controller}/{action},因此当您重定向到AdminController 时,URL 将是/Admin/Home。我真的鼓励您浏览 asp.net 网站上的所有信息。
    猜你喜欢
    • 2012-08-22
    • 2013-05-12
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多