我有一个包含2个区域/管理员和/用户的项目。
管理员的默认路线为 / Admin / Home / Index ,用户的默认路线为 /用户/主页/索引。
是否可以实施路由以使其主页网址看起来像 /个人资料/索引,但是为管理员显示来自 / Admin / Home / Index 的内容对于用户来说> /用户/主页/索引?
UPD
最后了解如何做到
context.MapRoute(
"Admin",
"Profile/{action}",
new { area = AreaName, controller = "Home", action = "Index" },
new { RoleConstraint = new Core.RoleConstraint() },
new[] { "MvcApplication1.Areas.Admin.Controllers" }
);
...
context.MapRoute(
"User",
"Profile/{action}",
new { area = AreaName, controller = "Home", action = "Index" },
new { RoleConstraint = new Core.RoleConstraint() },
new[] { "MvcApplication1.Areas.User.Controllers" }
);
public class RoleConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
string roleName = db.GetRoleByUserName(httpContext.User.Identity.Name);
string areaName = route.Defaults["area"].ToString();
return areaName == roleName;
}
}
它有效,但对我而言,它不是MVC的方式。有人知道怎么做吗?
答案 0 :(得分:4)
是。您展示的示例非常接近Microsoft提供的许多使用Route Constraints的示例。在将请求传递到控件之前,路由引擎充当预代理(或路由器,如果您愿意)。像IRouteConstraint这样的项目被定义,所以你可以做你所描述的。
答案 1 :(得分:3)
我喜欢这个解决方案,但要注意的一点是,路由本身不应该被用作唯一的安全形式。请记住,您应该使用[授权]属性保护您的控制器和操作,或者您限制访问。