ASP.NET MVC 异常“角色管理器功能尚未启用”

Posted

技术标签:

【中文标题】ASP.NET MVC 异常“角色管理器功能尚未启用”【英文标题】:ASP.NET MVC Exception 'The Role Manager feature has not been enabled' 【发布时间】:2019-04-21 12:48:13 【问题描述】:

我正在尝试制作一个 ASP.net MVC 网站。我在 Startup.cs 文件中设置了角色,如下所示:

    private void CreateRolesAndUsers()
    
        ApplicationDbContext context = new ApplicationDbContext();
        var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
        var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));

        if (!roleManager.RoleExists("SuperAdmin"))
        
            // first we create Admin role   
            var role = new Microsoft.AspNet.Identity.EntityFramework.IdentityRole();
            role.Name = "SuperAdmin";
            roleManager.Create(role);
            //Here we create a Admin super user who will maintain the website
            var user = new ApplicationUser();
            user.UserName = "SuperAdmin";
            user.Email = "SuperAdmin@SU.com";

            string userPWD = "Password1";

            var chkUser = UserManager.Create(user, userPWD);
            //Add default User to Role Admin   

            if (chkUser.Succeeded)
            
                var result1 = UserManager.AddToRole(user.Id, "SuperAdmin");
            
        
    

我已验证上述代码已成功将角色添加到数据库中,当我尝试 Roles.IsUserInRole(User.Identity.Name, "SuperAdmin") 时,我首先注意到角色不起作用

我正在尝试控制哪些角色在视图中看到某些内容并收到异常:

System.Configuration.Provider.ProviderException: '角色管理器功能尚未启用。'

当我尝试在 .cshtml 文件中调用以下行时:@Roles.GetRolesForUser();

我查看了在 Web.config 中启用 roleManager 的位置,但找不到它,如果我在 system.web 部分下添加它,它就不起作用

编辑:在以下代码中添加 (>roleManager enabled="true"

<system.web>
    <authentication mode="None"/>
    <compilation debug="true" targetFramework="4.7"/>
    <httpRuntime targetFramework="4.7"/>
</system.web>

我想我可能只是缺少一个依赖项或一些初始化程序,但没有任何线索,并且类似问题中的其他解决方案都没有工作。

【问题讨论】:

更新:目前,我找到了一种解决方法。通过使用“this.User.IsInRole("SuperAdmin")”,我得到了一个有效的返回值。但是上面的问题还是不行。 【参考方案1】:

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

System.Web.Security.Roles.Enabled 这是从 web.config 中 roleManager 元素的 enabled 属性直接读取的:

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

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

【讨论】:

正如我在上面的评论中所说,我已经尝试过了,但它不起作用。编译和运行需要一些时间,然后最终抛出另一个异常: System.Web.HttpException: 'Unable to connect to SQL Server database.' 您是否验证了您的 SQL 连接字符串。您是否能够连接到 SQL Server 数据库? 让我们这样说吧,在我尝试访问 roleManager 之前一切正常,并且根据您建议的修复,我必须重新创建并重新连接到数据库......这不太有意义,但感谢您的提示

以上是关于ASP.NET MVC 异常“角色管理器功能尚未启用”的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 5 MVC 6 RC1 API 中的自定义模型绑定异常

ASP.NET MVC 控制器不会从 LINQ lambda 捕获异常

ASP .NET MVC - 向 ajax 调用返回异常消息

控制器中的异常处理 (ASP.NET MVC)

ASP.net MVC LINQ 空引用异常 [重复]

七天学会ASP.NET MVC ——线程问题异常处理自定义URL