欢呼。
我正在尝试根据当前用户是否是管理员来实现一些条件路由。系统只有两种模式,管理员或非管理员,仅此而已。我将区域用于我的管理区域,因为控制器名称是相同的,但它们几乎在每种情况下都会提供不同的功能。
然而,在这个系统中,管理员不应该真正知道他们的管理员位置,他们只知道他们使用系统做其他事情,而不是普通用户做的事情。因此,我不希望两者在 URL 方面有任何区别。我想要做的是能够做类似 mysite.com/AuditHistory 的事情,并且取决于您是管理员还是用户,这取决于使用的控制器。因此,如果是用户发出此请求,那么它将使用AuditHistoryController
常规控制器文件夹中AuditHistoryController
的
我已经看到使用IRouteConstraint
并且可以按照以下方式做一些事情:
public class AdminRouteConstraint : IRouteConstraint
{
public AdminRouteConstraint() { }
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
return httpContext.User.IsInRole("Admin");
}
}
具有以下内容:
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", controller = "Home", id = UrlParameter.Optional },
new { controller = new AdminRouteConstraint() }
);
我可以简单地摆脱前面的“Admin /”并为其他路线做同样的事情但是说UserRouteConstraint
?不过,我还没有在任何地方看到这样做,并且不确定它是否正确。
关于如何做到这一点的任何想法?