Asp.net

定義條件路由

  • May 4, 2011

我一直在尋找類似的東西,但沒有運氣。我想建構一個對相同 url 使用不同控制器的應用程序。基本思想是,如果使用者以管理員身份登錄,他使用可以說管理員控制器,如果使用者只是使用者,他使用使用者控制器。這只是一個例子,基本上我想要一個函式來決定控制器路由採用什麼。

謝謝大家。任何幫助是極大的讚賞。

PS 用途:管理員有不同的 UI 和選項,輸出擷取,關注點分離

你需要創建一個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
);

輔導員本

引用自:https://stackoverflow.com/questions/5888079