Определение условных маршрутов - PullRequest
9 голосов
/ 04 мая 2011

Я искал что-то подобное, но не повезло. Я хочу создать приложение, которое использует разные контроллеры для одинаковых URL-адресов. Основная идея такова, что если пользователь вошел в систему как администратор, он использует, скажем, контроллер администратора, если пользователь просто пользователь, он использует контроллер пользователя. Это всего лишь пример, в основном я хочу иметь функцию, которая решает, какой маршрут контроллера займет.

Спасибо всем. Любая помощь с благодарностью.

PS Использование этого: Администратор имеет другой интерфейс и параметры, Выходной ловит, Разделение концерна

1 Ответ

14 голосов
/ 04 мая 2011

Вам необходимо создать RouteConstraint для проверки роли пользователя следующим образом:

using System;
using System.Web; 
using System.Web.Routing;

namespace Examples.Extensions
{
    public class MustBeAdmin : IRouteConstraint
    {
        public MustBeAdmin()
        { }

        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
        {
            // return true if user is in Admin role
            return httpContext.User.IsInRole("Admin");
        }
    }
}

Затем перед маршрутом по умолчанию объявите маршрут для роли администратора следующим образом:

routes.MapRoute(
    "Admins", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Admin", action = "Index", id = UrlParameter.Optional }, // Parameter default
    new { controller = new MustBeAdmin() }  // our constraint
);

counsellorben

...