1

私はいくつかの ASP.NET MVC 1 および 2 サイトを作成しました。なんとかv3をスキップできました。現在、新しい ASP.NET MVC 4 サイトを作成していますが、すべてのメンバーシップが完全に変更されていることがわかります。

最初は嬉しかったです。セットアップと使用は簡単に見え、インターネット プロジェクト テンプレートには、作業を開始するために必要なすべてのクラスとビューが付属していました。

残念ながら、私は今完全に立ち往生しています。ユーザーを認証するコードを拡張する必要があります。基本的に、Web サービスに対して一部のユーザーを認証し、ローカル データベースに対して他のユーザーを認証する必要があります。どちらのタイプのユーザーも、プロファイル データをローカル データベースに保存します。

私の問題は、SimpleMembership を拡張する方法が見つからないことです。

古いメンバーシップ プロバイダー モデルでは、SqlMembership から継承し、ValidateUser() をオーバーライドして、基本クラスを呼び出したり、Web サービスを呼び出したりすることに挑戦していたでしょう。

プロジェクトでSimpleMembershipから継承するクラスを作成し、それをweb.configでデフォルトのメンバーシッププロバイダーとして構成するようなことを試みましたが、エラーが発生しました

Parser Error Message: This method cannot be called during the application's pre-start initialization phase.

Line 32:     <membership defaultProvider="ssund">
Line 33:       <providers>
Line 34:         <add name="ssund" type="Ssund.Web.Providers.SsundSimpleMembershipProvider"/>
Line 35:       </providers>
Line 36:     </membership>
4

2 に答える 2

3

SimpleMembershipでは設定されずweb.config、ファイルで行われInitializeSimpleMembershipAttribute.csます。

残念ながら、使用されている WebSecurity クラスの実装は拡張できず、SimpleMembershipProvider の使用がハードコーディングされています。

SimpleMembership を使用する必要はありません。古いメンバーシップ プロバイダー インフラストラクチャの使用にフォールバックできます。

于 2012-10-28T22:18:10.613 に答える
1

拡張することはできますSimpleMembershipProviderが、プロバイダーの初期化方法が異常で制限が厳しいため、快適な体験ではありません。

プロバイダーは への呼び出しによって初期化されますが、明示的にWebSecurity.InitializeDatabaseConnectionを介してプロバイダーを設定することも同様に有効です。Web.Configそれらが拡張されSimpleMembershipProviderていれば、初期化中に正しく構成されます。

実際、 API でExtendedMembershipProvider使用するために独自のものを実装することもできますが、まったく呼び出す必要はありません(これはベース実装のみです)。欠点は、これをゼロから構築するには多くの作業が必要なことです。WebSecurityWebSecurity.InitializeDatabaseConnectionSimpleMembershipProvider

あなたが得ていたエラーは、おそらくプロバイダーのInitializeルーチン内で何かをしていたために、パイプラインの早い段階でプロバイダーとやり取りしたことが原因でした。

との違いの詳細については、SimpleMembershipProvider と MembershipProviderを参照してください。を拡張する例については、BetterMembership.Net をご覧くださいSimpleMembershipProviderMembershipProviderSimpleMembershipProvider

于 2013-10-03T22:32:44.817 に答える