2011-05-04 62 views
9

我一直在寻找类似的东西,但没有运气。我想要构建一个应用程序,为相同的URL使用不同的控制器。基本的想法就像是,如果用户以管理员身份登录,他使用可以说管理员控制器,如果用户只是一个用户,他使用用户控制器。这仅仅是一个例子,基本上我想有一个决定控制器路由的功能。定义条件路线

谢谢大家。任何帮助是极大的赞赏。

PS 使用此的: 管理员拥有不同的用户界面和选项, 输出醒目, 分离关注的

回答

14

你需要创建一个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"); 
     } 
    } 
} 

然后,在默认路由之前,为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

+0

非常感谢。我测试了它,它工作。谢谢你。 – 2011-05-04 19:03:54

+0

这个tipp也帮助了我! – SQueek 2014-02-14 08:54:15

+1

在代码中提及用户是否以正常用户身份登录,那么他/她将被重定向到用户控制器? – Thomas 2016-03-07 17:59:47