【问题标题】:supporting multi-tenant routes in mvc在 mvc 中支持多租户路由
【发布时间】:2013-08-19 11:29:01
【问题描述】:

我正在尝试在 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 -> 检测为 第一条路线(正确!)
  • /Home/Index -> 检测为第一条路线 (正确!)
  • /Client1/Home/Index - Client1 被检测为控制器 名称(不正确)

如果我切换路由,则租户路由有效,但基础路由无效。

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

请注意,我希望不必在路由中指定虚拟租户字符串,因为稍后我必须在需要解析租户特定信息的几个地方将其翻译回来。 em>

【问题讨论】:

  • 这里的租户是什么?是Action的参数吗?
  • 租户不是动作参数,它只是我可以在 mvc 管道的其他地方使用的额外信息,用于解决租户特定的依赖项和视图等

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


【解决方案1】:

你可以使用我写的库here。如果路由冲突,此库允许您定义替代路由。您必须按如下方式定义路由:

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 实现。

【讨论】:

  • 看起来很有希望会试一试
  • 代码链接已损坏。有人有副本吗?
猜你喜欢
  • 2011-12-02
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
相关资源
最近更新 更多