#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. где упоминается в коде, что если пользователь войдет в систему как обычный пользователь, то он / она будет перенаправлен на пользовательский контроллер?