gsh*_*arp 190 c# asp.net roleprovider
得到以下ProviderException:
尚未启用角色管理器功能.
到现在为止还挺好.
是否有某个方法可以调用以检查角色管理器是否已启用?
Inf*_*kka 296
您可以通过读取布尔属性来执行此操作:
System.Web.Security.Roles.Enabled
Run Code Online (Sandbox Code Playgroud)
这是从元素的enabled属性直接读取:roleManagerweb.config
<configuration>
<system.web>
<roleManager enabled="true" />
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
更新:
有关更多信息,请查看此MSDN示例:https://msdn.microsoft.com/en-us/library/aa354509(v = vs.110).aspx
Ser*_*gan 52
如果你来到这里因为你正在使用新的ASP.NET Identity UserManager,那么你真正想要的是RoleManager:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
Run Code Online (Sandbox Code Playgroud)
roleManager 将为您提供访问权限,以查看角色是否存在,创建等,以及是否为该角色创建 UserManager
New*_*que 11
我在其他地方通过Google找到了2条建议,建议a)确保你的数据库连接字符串(Roles正在使用的那个)是正确的,并且它的密钥拼写正确,并且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>
Run Code Online (Sandbox Code Playgroud)enabled="true"像这样添加:
<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
Run Code Online (Sandbox Code Playgroud)按下F6以构建,现在可以继续进行数据库更新而不会出现该异常:
update-database -verbose和Seed方法运行得很好(如果你没有搞乱其他地方)并在你的数据库中创建几个表;如果您正在使用,ASP.NET Identity UserManager您也可以这样做:
var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roles = userManager.GetRoles(User.Identity.GetUserId());
Run Code Online (Sandbox Code Playgroud)
如果您已将用户的密钥从Guid更改为Int,例如使用以下代码:
var roles = userManager.GetRoles(User.Identity.GetUserId<int>());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
124387 次 |
| 最近记录: |