197

得到以下ProviderException

角色管理器功能尚未启用。

到目前为止,一切都很好。

是否有可以调用的方法来检查角色管理器是否已启用?

4

7 回答 7

306

您可以通过读取布尔属性来做到这一点:

System.Web.Security.Roles.Enabled

这是从 中元素的enabled属性直接读取的:roleManagerweb.config

<configuration>
  <system.web>
    <roleManager enabled="true" />
  </system.web>
</configuration>


更新:
有关更多信息,请查看此 MSDN 示例:https ://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx

于 2011-07-25T00:56:08.187 回答
53

如果您因为使用新的而来到这里ASP.NET Identity UserManager,那么您实际上正在寻找的是RoleManager

var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));

roleManager将允许您查看角色是否存在、创建等,以及它是为UserManager

于 2014-04-23T05:40:54.883 回答
11

我通过 Google 在其他地方找到了 2 条建议:a)确保您的 db 连接字符串(Roles 正在使用的那个)正确,并且它的密钥拼写正确,以及 b)RoleManager 上的 Enabled 标志设置为 true。希望其中之一有所帮助。它对我有用。

您是否尝试检查 Roles.Enabled?此外,您可以检查 Roles.Providers 以查看有多少提供程序可用,并且您可以检查 Roles.Provider 以获得默认提供程序。如果它为空,则没有。

于 2010-10-11T20:49:17.397 回答
8

由于其中提到的异常,我发现了这个问题。我的 Web.Config 没有任何<roleManager>标签。我意识到即使我添加了它(正如Infotekka 建议的那样),它最终还是出现了数据库异常。在遵循此处其他答案中的建议后,没有一个可以完全解决问题。

由于这些Web.Config标签是可以自动生成的,所以手动添加来解决感觉不对。如果您处于类似情况,请撤消您对 Web.Config 和 Visual Studio 所做的所有更改:

  1. Ctrl+ Q,键入nuget并单击“管理 NuGet 包”;
  2. Ctrl+ E,键入providers并在列表中显示“Microsoft ASP.NET Universal Providers Core Libraries ”和“Microsoft ASP.NET Universal Providers for LocalDB ”(均由 Microsoft 创建);
  3. 单击两者中的安装按钮并关闭 NuGet 窗口;
  4. 检查您的 Web.config,现在您应该在ProfileMembershipSessionState标签以及新的RoleManager<providers>标签内至少有一个标签,如下所示:

    <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>
    
  5. enabled="true"像这样添加:

    <roleManager defaultProvider="DefaultRoleProvider" enabled="true">
    
  6. Press F6to Build 现在应该可以继续进行数据库更新而不会出现该异常:

    1. Ctrl+ Q,输入manager,点击“Package Manager Console”;
    2. 键入update-database -verbose和 Seed 方法将运行得很好(如果您没有在其他地方搞砸的话)并在您的数据库中创建一些表;
    3. Ctrl+ W+L打开服务器资源管理器,您应该能够在Data Connections > DefaultConnection > Tables中检查新创建的表中的RolesUsersInRoles表!
于 2016-04-19T17:07:07.117 回答
7

如果您正在使用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>());
于 2017-07-05T14:01:52.207 回答
-1

这是您需要在 MVC5 和更高版本中放入帐户控制器的代码,以获取用户的角色列表:

csharp public async Task<ActionResult> RoleAdd(string UserID) { return View(await UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList()); }

无需使用Roles.GetRolesForUser()和启用角色管理器功能。

于 2018-12-21T16:06:34.920 回答
-1
<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>
于 2017-09-18T19:08:44.450 回答