我有一个Asp.net Core应用程序我希望能够允许多个/不同的租户(客户端)访问相同的应用程序但使用不同的URL。我有所有租户(客户端)的通用数据库。 所以这是我想在一个域中托管我的应用程序的主要部分... www.myapplication.com然后允许不同的租户(客户端)使用
访问同一个应用程序1.www.TenantOne.myapplication.com
2.www.TenanatTwo.myapplication.com。
3.www。{TENANCY_NAME} .myapplication.com
我找不到任何关于如何做到这一点的信息而且我被困住了。 怎么做?请提供代码。感谢。
答案 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
您如何使用此数据取决于您。本文作者创建了一个过滤器属性,但有许多可能性,例如将租户名称作为参数传递给服务函数。