ASP.NET MVC - 多个默认索引页面,具体取决于角色

时间:2017-07-21 12:04:19

标签: asp.net-mvc roles

是否可以通过路由进行基于角色的重定向? 我的目标是根据用户的角色将用户重定向到主页,而不在登录操作(POST)中使用RedirectToAction来增强网站的响应能力。

我想要这样的东西。

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        if (User.IsInRole("Admin"))
        {
            routes.MapRoute(
                "Admin", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "User", action = "List", id = UrlParameter.Optional } // Parameter defaults
            );
        }
        else
        {
            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

        }
    }

2 个答案:

答案 0 :(得分:1)

在应用程序启动时设置路由,因此在用户进行身份验证之前建立路由等。你可以做的是使用通用的行动方法:

public ActionResult Go()
{
   if (User.IsInRole("Admin")) {
     return RedirectToAction("List", "User");
   }
   else {
     return RedirectToAction("Index", "Home");
   }
}

将所有用户导航到此Go操作方法,然后将其重定向到适当的位置。

答案 1 :(得分:0)

如果您希望两种情况的路由都相同,但是页面的内容不同,那么您也可以return个不同的View

public ActionResult GetStartPage()
{
   // ...

   if (User.IsInRole("Admin"))
   {
     return View("~/Views/Home/List.cshtml", viewModel);
   }
   else
   {
     return View("~/Views/Home/Index.cshtml", viewModel);
   }
}

这不是组织View的最佳方法,但是会发生此类用例,因此您可以轻松地实现它们。