ロールマネージャ機能が有効になっていません。
ここまでは順調ですね。
Role Managerが有効になっているかどうかを確認するために呼び出すことができるメソッドはどこにありますか?
ロールマネージャ機能が有効になっていません。
ここまでは順調ですね。
Role Managerが有効になっているかどうかを確認するために呼び出すことができるメソッドはどこにありますか?
回答:
これを行うには、次の場所にあるブール型プロパティを読み取ります。
System.Web.Security.Roles.Enabled
これは、enabled
のroleManager
要素の属性から直接読み取られますweb.config
。
<configuration>
<system.web>
<roleManager enabled="true" />
</system.web>
</configuration>
更新:
詳細については、このMSDNサンプルを確認してください:https : //msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx
roleManager
と、有効になります。しかし、今は例外が発生していますUnable to connect to SQL Server database
新しいを使用しているためにここに来た場合ASP.NET
Identity
UserManager
、実際に探しているのはRoleManager
:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManager
は、ロールが存在するかどうかを確認するためのアクセス権を作成し、作成などします。さらに、ロールは UserManager
Googleを介して、a)db接続文字列(Rolesが使用しているもの)が正しいこと、およびそのキーのスペルが正しいことを確認し、b)RoleManagerのEnabledフラグがtrueに設定されていることを示唆する2つの提案を見つけました。それらの1つがお役に立てば幸いです。それは私のためにした。
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>());
<roleManager
enabled="true"
cacheRolesInCookie="false"
cookieName=".ASPXROLES"
cookieTimeout="30"
cookiePath="/"
cookieRequireSSL="false"
cookieSlidingExpiration="true"
cookieProtection="All"
defaultProvider="AspNetSqlRoleProvider"
createPersistentCookie="false"
maxCachedResults="25">
<providers>
<clear />
<add
connectionStringName="MembershipConnection"
applicationName="Mvc3"
name="AspNetSqlRoleProvider"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<add
applicationName="Mvc3"
name="AspNetWindowsTokenRoleProvider"
type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
web.config
ですか?私はそれを入れてみました、Application_Start
そしてそれは言いますThis method can only be called during the application's pre-start initialization phase.