Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 在mvc中支持多租户路由_Asp.net Mvc 4_Asp.net Mvc Routing_Multi Tenant - Fatal编程技术网

Asp.net mvc 4 在mvc中支持多租户路由

Asp.net mvc 4 在mvc中支持多租户路由,asp.net-mvc-4,asp.net-mvc-routing,multi-tenant,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: "{co

我正在尝试在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 });
这适用于以下情况:

  • /->检测到第一条路线(正确!)
  • /主页->检测为 第一条路线(正确!)
  • /主页/索引->检测为第一条路由 (正确!)
  • /Client1/Home/Index-Client1被检测为控制器 姓名(不正确)
如果我切换路由,那么租户路由可以工作,但基本路由不能

我在这里遗漏了什么,有可能做到这一点吗


注意,我不希望在路由中指定虚拟租户字符串,因为稍后我将不得不在一些需要解析租户特定信息的地方将其翻译回。

您可以使用我编写的库。如果路由冲突,此库允许您定义备用路由。必须按如下方式定义管线:

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

这里的租户是什么?它是行动的参数吗?租户不是行动的参数,它只是额外的信息,我可以在mvc管道的其他地方使用它来解决租户特定的依赖关系和视图。etclooks承诺会给它一个成功的机会。到代码的链接断开了。有人有副本吗?