Answers:
您可以通过从以下boolean属性中读取内容来实现:
System.Web.Security.Roles.Enabled
这是直接从中enabled
的roleManager
元素的属性中读取的内容web.config
:
<configuration>
<system.web>
<roleManager enabled="true" />
</system.web>
</configuration>
更新:
有关更多信息,请查看此MSDN示例:https : //msdn.microsoft.com/zh-cn/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的其他地方找到2条建议,它们建议a)确保您的数据库连接字符串(角色正在使用的数据库连接字符串)正确且其键的拼写正确,以及b)RoleManager上的Enabled标志设置为true。希望这些帮助之一。它对我有用。
您是否尝试检查Roles.Enabled?另外,您可以检查Roles.Providers以查看有多少个可用的提供程序,也可以检查Roles.Provider中的默认提供程序。如果为null,则没有一个。
我发现这个问题是由于其中提到的异常。我的Web.Config没有任何<roleManager>
标签。我意识到,即使我添加了它(如Infotekka所建议),它最终也会出现数据库异常。遵循此处其他答案中的建议后,没有人完全解决问题。
由于可以自动生成这些Web.Config标记,因此手动添加它们来解决它是错误的。如果情况类似,请撤消对Web.Config和Visual Studio中所做的所有更改:
检查您的Web.config,现在您应该<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.