2011-05-04 69 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