我一直在寻找类似但没有运气的东西。我想构建一个应用程序,为不同的URL使用不同的控制器。基本的想法是,如果用户以管理员身份登录,他会使用管理控制器,如果用户只是用户,则使用用户控制器。这只是一个例子,基本上我想要一个决定控制器路由的函数。
谢谢大家。非常感谢任何帮助。
PS 使用此: Admin有不同的UI和选项, 输出捕获, 关注分离
答案 0 :(得分: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