【问题标题】:how to implement Multi-Tenant functionality in asp.net-core如何在 asp.net-core 中实现多租户功能
【发布时间】:2017-03-30 09:42:31
【问题描述】:

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

1.www.TenantOne.myapplication.com

2.www.TenaatTwo.myapplication.com.

3.www.{TENANCY_NAME}.myapplication.com

我找不到有关如何执行此操作的任何信息,我被卡住了。 怎么做?请提供代码。谢谢。

【问题讨论】:

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


    【解决方案1】:

    对不起,你必须先找点东西,然后再回来找人帮你。

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

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

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

    如果您已经尝试过某些东西,如果它还不起作用,我们很乐意为您指出。

    【讨论】:

      【解决方案2】:

      正如 Saravanan 建议的那样,这些类型的问题不属于 SO。为了让您开始,我建议您开始寻找是否有任何框架,例如 SaaSKit 可用于向管道添加多租户层。

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

      【讨论】:

        【解决方案3】:

        我相信您正在寻找的方法类似于下面网址中的文章。

        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
        

        您如何使用这些数据取决于您。文章作者创建了一个过滤属性,但是有很多可能,比如将租户名称作为参数传递给服务函数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-09-18
          • 2018-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-05
          • 1970-01-01
          相关资源
          最近更新 更多