4

是否可以为不同的用户角色创建不同的默认路由?

例如

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

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

            routes.MapRoute(
                "Admin", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "totalrewardstatement", action = "Details", id = UrlParameter.Optional } // Parameter defaults
            );

        }

上面有普通用户的默认路由,但如果管理员用户登录,则使用管理员路由?

4

2 回答 2

3

在 mvc 5 上使用自定义RouteConstraint为我解决了问题。

    public class RoleConstraint : IRouteConstraint
    {
        public bool Match
            (
                HttpContextBase httpContext,
                Route route,
                string parameterName,
                RouteValueDictionary values,
                RouteDirection routeDirection
            )
        {
            return httpContext.User.IsInRole(parameterName) ;
        }
    }

路由配置.cs

    routes.MapRoute(
        name: "Reader_Home",
        url: "",
        defaults: new { controller = "Reader", action = "Index", id = UrlParameter.Optional },
        constraints: new { reader_role = new RoleConstraint() }
    );

    routes.MapRoute(
        name: "Author_Home",
        url: "",
        defaults: new { controller = "Publication", action = "Index", id = UrlParameter.Optional },
        constraints: new { author_role = new RoleConstraint() }
    );

我使用 parameterName(author_role 和 reader_role)作为角色名称来检查是否简化。

于 2017-10-11T21:25:31.253 回答
2

MVC 不支持基于角色的路由。您所做的是使用默认控制器检查角色并重定向到该控制器

public ActionResult Index()
    {

        if (User.IsInRole("Supervisor"))
        {
            return RedirectToAction("Index", "InvitationS");
        }
        return View();
    }

http://forums.asp.net/t/1994888.aspx?role+based+routing+asp+net+mvc

于 2014-07-03T13:52:36.613 回答