2

背景

我有一个多租户应用程序,每个租户使用多个数据库。我正在使用 CodeFirstMembership,所以我可以完全控制 SimpleMembership 的实现。我的两个用户/角色实体都与我的应用程序的其余部分在同一个 DbContext 中。

问题

为了促进多租户,我有一个自定义路由,它看起来与默认的 vanilla MVC 路由看起来完全一样,除了我抓取子域,检查有帐户的租户,然后抓取他们的特定的连接字符串。我在 RouteData 上有一个名为 .GetSubdomain() 的扩展方法,它将返回使用的子域,所以我可以真正进行检查并在任何地方获取连接字符串,如果这有助于你的答案。

我需要我的会员提供商能够访问子域检查信息,以便指向正确的数据库,以便 [Authorize] 方法正常工作。

我试过的

  • 在 InitializeSimpleMembershipAttribute 中初始化成员资格提供程序
    • 这不起作用,因为您无法将动态参数传递给属性(例如 RouteData.GetSubdomain())
  • 在构造函数中初始化成员资格。
    • 虽然您可以在构造函数中调用 RouteData 方法并构建/运行应用程序,但 RouteData 尚未在控制器中的构造函数处填充,因此此方法也不起作用。
  • 我没有尝试过,但是在每个控制器方法的开头添加检查可能不起作用,因为授权已经运行。

所以...... 根据我的尝试,似乎我需要连接到填充 RouteData 和实际授权之间的点。有没有一点我可以有效地做到这一点?

谢谢!

4

1 回答 1

1

WOW. In a total oversight, I failed to see the ActionExecutingContext that was being passed into the InitializeSimpleMembership attribute. The context being passed in actually contains RouteData, and the subdomain information needed to properly initialize the membership!

于 2013-03-03T22:58:11.570 回答