背景
我有一个多租户应用程序,每个租户使用多个数据库。我正在使用 CodeFirstMembership,所以我可以完全控制 SimpleMembership 的实现。我的两个用户/角色实体都与我的应用程序的其余部分在同一个 DbContext 中。
问题
为了促进多租户,我有一个自定义路由,它看起来与默认的 vanilla MVC 路由看起来完全一样,除了我抓取子域,检查有帐户的租户,然后抓取他们的特定的连接字符串。我在 RouteData 上有一个名为 .GetSubdomain() 的扩展方法,它将返回使用的子域,所以我可以真正进行检查并在任何地方获取连接字符串,如果这有助于你的答案。
我需要我的会员提供商能够访问子域检查信息,以便指向正确的数据库,以便 [Authorize] 方法正常工作。
我试过的
- 在 InitializeSimpleMembershipAttribute 中初始化成员资格提供程序
- 这不起作用,因为您无法将动态参数传递给属性(例如 RouteData.GetSubdomain())
- 在构造函数中初始化成员资格。
- 虽然您可以在构造函数中调用 RouteData 方法并构建/运行应用程序,但 RouteData 尚未在控制器中的构造函数处填充,因此此方法也不起作用。
- 我没有尝试过,但是在每个控制器方法的开头添加检查可能不起作用,因为授权已经运行。
所以...... 根据我的尝试,似乎我需要连接到填充 RouteData 和实际授权之间的点。有没有一点我可以有效地做到这一点?
谢谢!