我有两个控制器,一个叫做Dashboard,另一个叫做DashboardCash。现在,我的应用程序可以由两种类型的用户访问,一种类型的用户只能访问Dashboard(类型A用户),而其他类型的用户只能访问DashboardCash(类型B用户)。为了确保我已经放置了登录页面。
我想做的是,当Type A用户成功登录后,我想给他们显示不带控制器名称的url,http://example.com
而不是向其显示诸如的控制器名称http://www.example.com/Dashboard
。对于B型用户,我想向他们显示相同的内容,http://www.example.com
但是在这里我要替换DashboardCash。
当前,我在Global.asax文件中定义了以下映射代码:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Dashboard", action = "Index", id = UrlParameter.Optional
}, // Parameter defaults
new string[] { "Merit.Traveller.BMS.Controllers" });
这段代码对于Dashboard正常工作,现在我想对DashboardCash做同样的事情。
编写一个自定义路由约束,使路由根据用户类型进行匹配。
实现以下接口
public interface IRouteConstraint
{
bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection);
}
然后在路由中使用它,如下所示:
routes.MapRoute(name: "newRoute1",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Dashboard", action = "Index" },
constraints: new { name = new UserTypeARouteConstraint() }
);
编辑-根据下面的问题,这里有更多详细信息
这就是你的第二条路线
routes.MapRoute(name: "newRoute2",
url: "{controller}/{action}/{id}",
defaults: new { controller = "DashboardCash", action = "Index" },
constraints: new { name = new UserTypeBRouteConstraint() }
);
这就是约束的样子
public class UserTypeARouteConstraint : IRouteConstraint
{
bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
return IsUserOfTypeA(httpContext);
}
private bool IsUserOfTypeA(HttpContextbase httpContext)
{
// custom logic to figure out the user group
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句