簡體   English   中英

在控制器的構造函數/屬性中獲取RouteData來路由[Authorize]的ConnectionString

[英]Getting RouteData in a Controller's constructor/attributes to route [Authorize]'s ConnectionString

背景

我有一個多租戶應用程序,每個租戶使用多個數據庫。 我正在使用CodeFirstMembership,因此可以完全控制SimpleMembership的實現。 我的兩個User / Role實體都與應用程序的其余部分位於同一DbContext中。

問題

為了促進多租戶,我有一個自定義路由,該路由看起來與默認的普通MVC路由完全一樣,除了我抓取了子域,將其與擁有帳戶的租戶進行核對,然后抓取他們的特定的連接字符串。 我在RouteData上有一個擴展方法,名為.GetSubdomain(),它將返回使用的子域,因此,如果可以幫助您找到答案,我可以真正進行檢查並在任何地方獲取連接字符串。

我需要我的成員資格提供者能夠訪問子域檢查信息,以便指向正確的數據庫,以使[Authorize]方法能夠正常工作。

我嘗試過的

  • 在InitializeSimpleMembershipAttribute中初始化成員資格提供程序
    • 這行不通,因為您無法將動態參數傳遞到屬性中(例如RouteData.GetSubdomain())
  • 在構造函數中初始化成員資格。
    • 盡管您可以在構造函數中調用RouteData方法並構建/運行應用程序,但尚未在控制器中的構造函數的位置填充RouteData,因此該方法也不起作用。
  • 我沒有嘗試過,但是由於授權已經運行,因此在每個控制器方法的開頭添加檢查可能無法正常工作。

所以...從我嘗試過的東西看來,我似乎需要深入研究填充RouteData和實際授權之間的問題。 我可以有效地做到這一點嗎?

謝謝!

哇。 總的來說,我看不到正在傳遞到InitializeSimpleMembership屬性中的ActionExecutingContext 傳入的上下文實際上包含RouteData,以及正確初始化成員資格所需的子域信息!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM