3

複数のドメインをホストするために共有ホスティングアカウントで実行されるASP.NetMVCアプリを構築しています。メンバーシップを含むデフォルトのテンプレートから始めて、ドメインごとにMVCエリアを作成しました。ルーティングは、リクエストの対象となるドメインに応じて、正しいエリアを指すように設定されます。次に、各MVCエリアに固有のメンバーシップを設定したいと思います。私は最初に明白なことを試み、プロバイダーのapplicationName属性を変更するために、各領域のweb.configのセクションをオーバーライドしようとしました。エリアがアプリケーションルートとして設定されていないため、これは機能しません。エリアごとにユーザーを分ける簡単な方法はありますか?

4

1 に答える 1

2

私は、各領域を完全に分離するための実用的なソリューションがあると思います。デフォルトのテンプレートを開始点として使用して、文字列を受け入れるためにMvcApplication1.Models.AccountMembershipServiceクラスに別のコンストラクターを追加しました(あいまいさを排除するために既存のコンストラクターも変更しました)。

    public AccountMembershipService()
    {
        _provider = Membership.Provider;
    }

    public AccountMembershipService(MembershipProvider provider)
    {
        _provider = provider ?? Membership.Provider;
    }

    public AccountMembershipService(string applicationName)
        : this()
    {
        _provider.ApplicationName = applicationName;
    }

次に、AccountControllerを各エリアにコピーし、Initializeオーバーロードを変更して、ルートデータのエリア名を含めました。

    protected override void Initialize(RequestContext requestContext)
    {
        if (FormsService == null) { FormsService = new FormsAuthenticationService(); }            
        if (MembershipService == null) { MembershipService = new   AccountMembershipService(requestContext.RouteData.DataTokens["area"].ToString()); }

        base.Initialize(requestContext);
    }

これで、各領域がフォーム認証の下で新しいアプリケーションとして登録され、すべてのユーザーと役割を個別に保持する必要があります。

于 2010-05-01T15:16:49.207 に答える