Маршрутизация на основе ролей MVC

У меня есть проект с 2 областями / Admin и / User.

Маршрут по умолчанию администратора - / Admin / Home / Index , а маршрут пользователя по умолчанию - / User / Home / Index .

Можно ли реализовать маршрутизацию, чтобы их домашний URL выглядел как / Profile / Index , но отображал контент из / Admin / Home / Index для администраторов и / User / Home / Index для пользователей?

upd

Наконец узнаю, как это сделать

context.MapRoute(
    "Admin",
    "Profile/{action}",
    new { area = AreaName, controller = "Home", action = "Index" },
    new { RoleConstraint = new Core.RoleConstraint() },
    new[] { "MvcApplication1.Areas.Admin.Controllers" }
);
...
context.MapRoute(
    "User",
    "Profile/{action}",
    new { area = AreaName, controller = "Home", action = "Index" },
    new { RoleConstraint = new Core.RoleConstraint() },
    new[] { "MvcApplication1.Areas.User.Controllers" }
);

public class RoleConstraint : IRouteConstraint
{
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        string roleName = db.GetRoleByUserName(httpContext.User.Identity.Name);
        string areaName = route.Defaults["area"].ToString();
        return areaName == roleName;
    }
}

Это работает, но для меня это не метод MVC. Кто-нибудь знает, как это сделать правильно?

17
задан Dmitrij 18 November 2011 в 11:44
поделиться

1 ответ

Да. Пример, который вы показали, очень похож на многие из предоставленных Microsoft примеров использования Route Constraints. Механизм маршрутизации действует как предварительный прокси-сервер (или маршрутизатор, если хотите), прежде чем запрос будет передан в элемент управления. Такие элементы, как IRouteConstraint, определены, поэтому вы можете делать то, что описали.

4
ответ дан 30 November 2019 в 14:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: