2

カスタム ASP.NET ロール プロバイダーを実装していますが、渡されたユーザーが渡されたロールに既に含まれている場合、そのAddUsersToRolesメソッドが をスローする必要があるかどうか疑問に思っています。デフォルトの Microsoft SQL Server ロール プロバイダーは、Microsoft の公式ドキュメントでは推奨されていません。ProviderExceptionSqlRoleProvider

例外の詳細: System.Configuration.Provider.ProviderException: ユーザー 'myTestUser' は既にロール 'myTestRole' にあります。

この場合、プロバイダーが例外をスローするのではなく、特定のユーザーが既に特定のロールにいるときに先に進むことが役立つと思います。そうすれば、呼び出し元のコードは重複について心配する必要がありません。しかし、この場合、スローされる例外に依存する既存のロール プロバイダーを使用するコードが存在する可能性はありますか? あるとすれば、マイクロソフト自身が推奨していないように見えるので、そうするべきでしょうか?

AddUsersToRolesユーザーが既にロールにいるときに例外をスローしないようなメソッドを実装したい場合は、3 つの選択肢があります。

  1. として実装しAddUsersToRoles、デフォルトとは異なる動作をするだけですSqlRoleProvider
  2. EnsureUsersInRolesこれをロール プロバイダー クラスの新しいメソッドとして実装し、((MyProvider)(Roles.Provider)).EnsureUsersInRoles().
  3. 完全に別のクラスに実装するだけです。
4

2 に答える 2

0

私は結局、私の質問で提案したルート2)を下りました。いくつかの追加メソッドを使用して実装しRoleProvider、キャスト((MyProvider)(Roles.Provider))を使用して追加メソッドにアクセスします。そのうちの1つはEnsureUsersInRoles()、呼び出し元のコードが必要とする非例外スロー機能を備えたメソッドです。

于 2013-02-14T19:15:57.597 に答える
0

個人的には、Microsoft が行っていることに準拠します。どこかでその例外をスローする必要がある可能性を排除するのは難しいでしょう。

于 2013-02-12T17:08:03.343 に答える