aspnetboilerplate - 如何将自定义域名与 abp 框架一起使用
问题描述
我确信这不是什么新鲜事,但也许我不知道输入谷歌的正确方法......基本上我的目标是使用 abp.io 创建一个多租户应用程序,并满足以下要求。
- 新用户注册为租户。
- 然后,用户将他们的域 dns 记录指向我的应用程序。
- 用户输入要用于其租户的自定义域。
- 用户登录和页面将在他们选择的域上解析。
例如,我的应用程序名称托管在 winemaker.com 上。制作葡萄酒的人想要使用我的应用程序并使用 JoesFootWine 的租户名称 (winemaker.com/JoesFootWine) 进行注册...但是 Joe 已经拥有域 JoesFootWine.com 并希望将其用于此应用程序。我需要为 Joe 设置一种方法来轻松设置他们的租户,以便在 JoesFootWine.com 上解决 winemaker.com/JoesFootWine。
在 JoesFootWine.com/{login-route} 上设置登录页面并且租户已经设置且不可更改,这将是一个额外的好处,但不是硬性要求。
解决方案
这里最棘手的事情是根据域解析租户。我之前使用 ABP 完成过此操作,但不记得所有细节,但您可以使用 ITenantResolveContributor 接口创建自己的自定义租户解析器。然后可以使用您的解析器代替默认的解析器。
文档在这里https://docs.abp.io/en/abp/latest/Multi-Tenancy
在您的自定义租户解析器中,您需要获取当前正在使用的域,然后使用该域在数据库中查找租户。您可以将它们存储在单独的表中,以防您希望允许租户拥有多个域名等,或者它可能只是租户表中的一列。与 MVC 形式或其他东西相比,从内存中从 Aspnet 核心中的 api 调用获取域有点棘手。
如果它是您需要解析租户的 api 调用,那么我认为您应该能够从推荐人那里获取域
其实我只是挖了这个。我认为很可能有更好的方法来做到这一点,但希望它可以帮助你开始。
//first try the referrer to see if we can resolve the tenant
//this will be the referrer from the client calling the api
var referer = httpContext.Request.Headers.Any(x => x.Key.Equals("referer", StringComparison.InvariantCultureIgnoreCase)) ? httpContext.Request.Headers["Referer"].ToString() : "";
if (!string.IsNullOrEmpty(referer))
{
Uri myUri = new Uri(referer);
referer = myUri.Host;
}
//if no referrer then resort to the host
//currently this will not change based on tenant
//but could be an option with some more customization instead
//of relying on referrer.
if (string.IsNullOrEmpty(referer))
referer = httpContext.Request.Host.Host;
我还记得在 Angular 路由或其他东西的 UI 方面我不需要做任何额外的事情。现在真的想不起来一年多以前的样子了。
推荐阅读
- python - 在python中读取一个大文件作为数据框的有效方法
- javascript - 跟踪参与者离开窗口
- keycloak - KeyCloak - 入口不允许通过 https 服务连接
- spring-cloud-dataflow - 在pcf中为spring cloud数据流服务器启用调度器
- javascript - NestJs:使用类验证器验证对象数组
- pandas - 如何在 Pandas 中的两个过滤器之间使用 AND (&) 运算符?
- pdf - 如何使用 Google Apps 脚本以 PDF 格式导出/转换 Google Doc?
- android - 如何使用 Glide 加载带有 AdaptiveBitmap 的 IconCompat
- android - 模拟 BLE 服务(BLE 嗅探器)
- firebase - 读取数据中的 Flutter Firebase 错误:输入“列表”
' 不是类型 'Map 的子类型 ' 在类型转换中