我正在尝试在asp.net mvc 4中设置多租户解决方案,其中如果某些控制器需要不同的功能,您可以指定租户特定的覆盖。
我希望有类似
的路线/{Controller}/{Action}/{Id}/
/{Tenant}/{Controller}/{Action}/{Id}
如果未指定租户,则应与第一条路线匹配。
我试过了
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
routes.MapRoute(
name: "Tenant",
url: "{tenant}/{controller}/{action}/{id}",
defaults: new { tenant = "", controller = "Home", action = "Index", id = UrlParameter.Optional });
这适用于
如果我切换路线然后租户路线工作,但基地路线不工作。
我在这里缺少什么,是否有可能实现这一目标?
请注意,我不想在路线中指定虚拟租户字符串,因为我需要稍后将其转换回我需要解决特定租户的几个地方信息。
答案 0 :(得分:2)
您可以使用定义的库here。如果路由冲突,此lib允许您定义备用路由。您必须按如下方式定义路线:
var firstRoute = routes.MapReplaceableRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
var secoundRoute = routes.MapRoute(
name: "Tenant",
url: "{tenant}/{controller}/{action}/{id}",
defaults: new { tenant = "", controller = "Home", action = "Index", id =
UrlParameter.Optional }, lookupParameters: new string[] {"tenant"}, lookupService: new LookupService());
firstRoute.AlternativeRoute = secondRoute;
对于lookupService,您只需要一个IRouteValueLookupService的空实现。
另请查看其他帖子here。