如何在asp.net-core中实现多租户功能

时间:2017-03-30 09:42:31

标签: multi-tenant asp.net-core-routing

我有一个Asp.net Core应用程序我希望能够允许多个/不同的租户(客户端)访问相同的应用程序但使用不同的URL。我有所有租户(客户端)的通用数据库。 所以这是我想在一个域中托管我的应用程序的主要部分... www.myapplication.com然后允许不同的租户(客户端)使用

访问同一个应用程序

1.www.TenantOne.myapplication.com

2.www.TenanatTwo.myapplication.com。

3.www。{TENANCY_NAME} .myapplication.com

我找不到任何关于如何做到这一点的信息而且我被困住了。 怎么做?请提供代码。感谢。

3 个答案:

答案 0 :(得分:0)

抱歉,你必须先得到一些东西,然后再回来让人们帮助你。

我想说这是一个基于域的通配符映射,并在您的身份验证逻辑中进行更改以从URL获取租户ID。一旦您确定了租户,您只需登录然后继续前进。就像您可能拥有一个包含租户详细信息的数据库,如

tenant1 | tenant1.company.com | guid-ofthe-tenant | etc...

获得URL后,您在上表中查找并获取租户代码,然后选择登录模式,然后继续。

如果您已尝试过某些内容,我们很乐意为您指出它是否仍然有效。

答案 1 :(得分:0)

正如Saravanan所说,这些类型的问题不属于SO。为了帮助您入门,我建议您开始查看是否有任何框架(例如SaaSKit)可用于向管道添加多租户层。

关键部分是了解每个请求的来源。使用子域名是实现这一目标的好方法,中间件是“识别”租户的好地方。您可以拥有一个数据库来保留租户,但实施完全取决于您。我还就这个问题写了一点article。虽然它不是ASP.NET Core,但原则仍然适用。

答案 2 :(得分:0)

我认为您正在寻找的方法类似于以下网址上的文章。

https://dotnetthoughts.net/building-multi-tenant-web-apps-with-aspnet-core/

在其中,作者将请求URL拆分为由地址中的点分隔的字符串数组。变量'子域'然后设置为该数组的第一个元素。在你的问题中,看起来你可能想要使用数组中的第二个元素,但你明白了。

var fullAddress = actionExecutingContext.HttpContext?.Request?
     .Headers?["Host"].ToString()?.Split('.');

var subdomain = fullAddress[0];
//do something, get something, return something

您如何使用此数据取决于您。本文作者创建了一个过滤器属性,但有许多可能性,例如将租户名称作为参数传递给服务函数。

相关问题