ASP.NET MVC - 多个默认索引页面取决于角色
ASP.NET MVC - Multiple default index pages depending on role
是否可以通过路由进行基于角色的重定向?
我的目标是根据用户的角色将用户重定向到主页,而不是在登录操作 (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
);
}
}
路由是在应用程序启动时设置的,因此路由是在用户通过身份验证等之前建立的。您可以做的是使用通用操作方法:
public ActionResult Go()
{
if (User.IsInRole("Admin")) {
return RedirectToAction("List", "User");
}
else {
return RedirectToAction("Index", "Home");
}
}
将所有用户导航到此 Go 操作方法,它将把他们重定向到适当的位置。
如果您希望两种情况的路由相同,但页面内容不同,您也可以return
不同的View
s:
public ActionResult GetStartPage()
{
// ...
if (User.IsInRole("Admin"))
{
return View("~/Views/Home/List.cshtml", viewModel);
}
else
{
return View("~/Views/Home/Index.cshtml", viewModel);
}
}
这不是组织 View
的最佳方式,但这样的用例会发生,这就是您可以轻松实现它们的方式。
是否可以通过路由进行基于角色的重定向?
我的目标是根据用户的角色将用户重定向到主页,而不是在登录操作 (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
);
}
}
路由是在应用程序启动时设置的,因此路由是在用户通过身份验证等之前建立的。您可以做的是使用通用操作方法:
public ActionResult Go()
{
if (User.IsInRole("Admin")) {
return RedirectToAction("List", "User");
}
else {
return RedirectToAction("Index", "Home");
}
}
将所有用户导航到此 Go 操作方法,它将把他们重定向到适当的位置。
如果您希望两种情况的路由相同,但页面内容不同,您也可以return
不同的View
s:
public ActionResult GetStartPage()
{
// ...
if (User.IsInRole("Admin"))
{
return View("~/Views/Home/List.cshtml", viewModel);
}
else
{
return View("~/Views/Home/Index.cshtml", viewModel);
}
}
这不是组织 View
的最佳方式,但这样的用例会发生,这就是您可以轻松实现它们的方式。