【问题标题】:Getting RouteData in a Controller's constructor/attributes to route [Authorize]'s ConnectionString在控制器的构造函数/属性中获取 RouteData 以路由 [Authorize] 的 ConnectionString
【发布时间】:2013-03-03 21:17:59
【问题描述】:

背景

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

问题

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

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

我的尝试

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

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

谢谢!

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-membership routedata


    【解决方案1】:

    哇。在完全疏忽中,我没有看到被传递到 InitializeSimpleMembership 属性中的ActionExecutingContext。传入的上下文实际上包含 RouteData,以及正确初始化成员资格所需的子域信息!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 1970-01-01
      相关资源
      最近更新 更多