マルチテナント アプリケーションでサブドメインとカスタム ルートを使用する方法に関する記事をいくつか読みましたが、私が取り組んでいるプロジェクトには 1 つのドメインしか必要ありません。デフォルトのメンバーシップ プロバイダーを使用し、暗号化されたテナント ID を Cookie に保存しています。
私の質問はコントローラーに関するものです。現在、すべてのアクションの最初の項目が Cookie から TenantID を取得し、それをすべての Linq クエリに渡すように構築中です。代わりにそれをコントローラ クラスの先頭に移動しても安全なので、コントローラ インスタンスごとに 1 回だけ発生しますか? それとも、複数のユーザーが同じコントローラーにアクセスしている場合、データのクロスオーバーが発生する可能性がありますか?
それが可能であることを示唆するこの記事を見つけましたが、確認したいと思います。
例として、これは現在のシステムです。
public class ThisController : Controller
{
private DBContext db = new ThisContext();
public ActionResult Index()
{
long tenantid = AuthUser.GetTenantID();
...
これは私たちが検討しているものです:
public class ThisController : Controller
{
private DBContext db = new ThisContext();
private Int64 tenantid = AuthUser.GetTenantID();
public ActionResult Index()
{
...
デフォルトの動作についての私の理解では、リクエストごとにコントローラ クラスの新しいインスタンスが作成されますが、先に進む前にそれが正しいことを確認したいと思います。