次の ProviderException を取得しました:
役割マネージャー機能が有効になっていません。
ここまでは順調ですね。
Role Managerが有効になっているかどうかを確認するために呼び出すことができるメソッドはどこかにありますか?
これを行うには、次のブールプロパティから読み取ります。
System.Web.Security.Roles.Enabled
これは、web.config
のenabled
要素のroleManager
属性からの直接読み取りです。
<configuration>
<system.web>
<roleManager enabled="true" />
</system.web>
</configuration>
更新:
詳細については、次のMSDNサンプルを参照してください。 https://msdn.Microsoft.com/en-us/library/aa354509(v = vs.110).aspx
新しいASP.NET
Identity
UserManager
を使用しているためにここに来た場合、実際に探しているのはRoleManager
です:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManager
は、ロールが存在するかどうか、作成などを確認するためのアクセス権を提供し、さらにUserManager
に対して作成されます。
私は、a)db接続文字列(Rolesが使用しているもの)が正しいこと、そのキーのスペルが正しいことを確認すること、b)RoleManagerのEnabledフラグがtrueに設定されていることを示唆する2つの提案をGoogle経由で見つけました。それらのいずれかが役立つことを願っています。それは私のためにした。
Roles.Enabledを確認しましたか?また、Roles.Providersを使用して、使用可能なプロバイダーの数を確認したり、デフォルトのプロバイダーのRoles.Providerを確認したりできます。 nullの場合はありません。
この質問は、例外が言及されているために見つかりました。私のWeb.Configには<roleManager>
タグがありませんでした。 Infotekkaが提案したように として追加しても、データベース例外になってしまうことに気付きました。ここの他の回答の提案に従った後、問題を完全に解決したものはありませんでした。
これらのWeb.Configタグは自動的に生成できるため、手動で追加して解決するのは間違っていると感じました。同様の場合は、Web.ConfigおよびVisual Studioで行ったすべての変更を元に戻します。
Web.configを確認すると、少なくとも1つの<providers>
タグがProfile、Membership、SessionStateタグ内にあり、新しいタグ内にもあるはずです- RoleManagerタグ、次のように:
<roleManager defaultProvider="DefaultRoleProvider">
<providers>
<add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=NUMBER" connectionStringName="DefaultConnection" applicationName="/" />
</providers>
</roleManager>
以下のようにenabled="true"
を追加します。
<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
押す F6 ビルドするために、その例外なしでデータベースの更新に進むことができます:
update-database -verbose
と入力すると、Seedメソッドが正常に実行され(他の場所で混乱していない場合)、データベースにいくつかのテーブルが作成されます。ASP.NET Identity UserManager
を使用している場合は、次のようにも取得できます。
var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roles = userManager.GetRoles(User.Identity.GetUserId());
たとえば、ユーザーのキーをGuidからIntに変更した場合は、次のコードを使用します。
var roles = userManager.GetRoles(User.Identity.GetUserId<int>());