0

VS 2012 インターネット テンプレートを使用した ASP.NET MVC 4 Web アプリケーションのコンテキストで、SimpleMembershipProvider について詳しく知りたいです。

Q1. モジュールはどこで構成されていますか? ASP.NET Web フォーム バージョンでは、web.config で確認できます。MVC 4 バージョンでは、デフォルトの web.config にメンバーシップ プロバイダーへの参照がありません。

Q2. machine.config には、構成済みの SqlMembershipProvider があります。これはいつ/どこでオーバーライドされますか?

Q3. SimpleMembershipInitializer()呼び出される トリガーは何ですか?Globals.asax にはありません。既にログインしているユーザーがいて、Web アプリケーションを再起動すると (または、azurewebsites がしばらく休眠した後にアプリを起動した場合)、ユーザーは次のような問題に遭遇します。

「WebSecurity」クラスの他のメソッドを呼び出す前に、「WebSecurity.InitializeDatabaseConnection」メソッドを呼び出す必要があります。

彼が次に私のサイトのリンクをクリックしたとき。このメソッドを複数回呼び出しても問題ありませんか?

4

1 に答える 1

0

A1. インターネット テンプレートは、web.config に次のようなエントリを作成する必要があります。

<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
  <providers>
    <clear/>
    <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
  </providers>
</roleManager>
<membership defaultProvider="SimpleMembershipProvider">
  <providers>
    <clear/>
    <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
  </providers>
</membership>

これにより、SimpleMembership で使用されるロール プロバイダーとメンバーシップ プロバイダーが構成されます。VS 2012 を搭載したマシンで MVC4 のインターネット テンプレートを作成すると、それらは常に存在します。Views ディレクトリではなく、アプリケーションのルート ディレクトリにある web.config を見ていることを確認してください。この情報は、ルート web.config にある必要があります。そこにない場合は、SimpleMembership が正しく機能するように追加する必要があります。

A2. A1 に示すように、web.config に情報を入れると、他のプロバイダーはオーバーライドされます。最初に clear 要素を使用して、以前に定義されたプロバイダーをクリアすることに注意してください。

A3. InitializeSimpleMembershipAttributeAccountControllerに装飾され 、SimpleMembership の遅延初期化を実行します。AccountController アクションにアクセスしようとした場合にのみ呼び出されます。たとえば、ユーザーがログインするとすぐに、データベースが初期化されます。この初期化方法は、フォーム認証が使用されていない場合でも、インターネット テンプレートで作成されたアプリケーションが機能するように行われました。私はこの初期化方法が好きではなく、フォーム認証を行う場合は Global.asax Application_Start メソッドで行うことを好みます。この初期化を使用するようにアプリを変更する方法については、この記事を参照してください。

WebSecurity.InitializeDatabaseConnectionを複数回呼び出すと、例外がスローされます。WebSecurity.Initializedをチェックする if ステートメントでラップすることを常にお勧めします。

于 2013-10-15T14:52:28.817 に答える