2011-05-04 16 views
9

He estado buscando algo similar, pero no tuve suerte. Quiero construir una aplicación que use diferentes controladores para las mismas URL. La idea básica es similar a la de un usuario que inicia sesión como administrador, usa el controlador de administración, por ejemplo, si el usuario es solo un usuario, usa el controlador de usuario. Esto es solo un ejemplo, básicamente quiero tener una función que decida qué ruta de controlador toma.Definición de rutas condicionales

Gracias a todos. Cualquier ayuda es muy apreciada.

PS El uso de este: administración tiene diferente interfaz de usuario y las opciones, salida captura, Separación de preocupación

Respuesta

14

Es necesario crear un RouteConstraint para comprobar la función del usuario, de la siguiente manera:

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"); 
     } 
    } 
} 

Entonces, antes de que su ruta por defecto, declarar una ruta para el papel de administración, de la siguiente manera:

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

+0

Muchas gracias. Lo probé y funciona. Gracias. –

+0

¡este consejo también me ayudó! – SQueek

+1

donde se menciona en el código si el usuario inicia sesión como usuario normal, entonces él/ella será redirigido al controlador del usuario? – Thomas