支持mvc中的多租户路线

时间:2013-08-19 11:29:01

标签: asp.net-mvc-4 asp.net-mvc-routing multi-tenant

我正在尝试在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 });

这适用于

  • / - >被检测为第一条路线(正确!)
  • / Home - >检测为 第一条路线(正确!)
  • /主页/索引 - >检测为第一条路线 (正确!)
  • / Client1 / Home / Index - Client1被检测为控制器 姓名(不正确)

如果我切换路线然后租户路线工作,但基地路线不工作。

我在这里缺少什么,是否有可能实现这一目标?

请注意,我不想在路线中指定虚拟租户字符串,因为我需要稍后将其转换回我需要解决特定租户的几个地方信息。

1 个答案:

答案 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