Определение условных маршрутов

#asp.net #asp.net-mvc-3 #asp.net-mvc-routing

#asp.net #asp.net-mvc-3 #asp.net-mvc-маршрутизация

Вопрос:

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

Спасибо вам всем. Любая помощь приветствуется.

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

Ответ №1:

Вам необходимо создать 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
);
  

советник бен

Комментарии:

1. этот tipp мне тоже помог!

2. где упоминается в коде, что если пользователь войдет в систему как обычный пользователь, то он / она будет перенаправлен на пользовательский контроллер?