Roles.GetRolesForUser()& Roles.GetAllRoles()返回空

时间:2016-11-27 08:59:36

标签: c# asp.net asp.net-mvc authentication asp.net-mvc-5

的web.config

<roleManager enabled="true" defaultProvider="SqlRoleManager">
  <providers>
    <clear />
    <add name="SqlRoleManager"
         type="System.Web.Security.SqlRoleProvider"
         connectionStringName="DefaultConnection"
         />
  </providers>
</roleManager>

在asp.net mvc 5中,我正在尝试检测当前用户的角色,以便我可以将他重定向到特定于其角色的页面,但

在我的控制器中

if (Roles.IsUserInRole(User.Identity.GetUserName(), "superadmin")

if (Roles.IsUserInRole(User.Identity.Name, "superadmin")

两者都不是真的,我确定我已经登录了,因为User.Identity.GetUserName()正在显示我的登录信息

尝试调试,我发现Roles.GetRolesForUser()是空的,我已经检查了在线资源但仍无法解决方案

进一步调试显示Roles.GetAllRoles()也为空,但我的AspNetRoles表有5条记录。

我查看了AspNetUserRoles,发现我当前的用户ID分配给了特定的角色ID

并且我已成功运行aspnet_regsql.exe以添加所有功能但仍无法获取角色

我认为aspnet_regsql.exe适用于网络表单(我不确定)

1 个答案:

答案 0 :(得分:0)

我在手机上所以不能仔细检查,但我确定IsUserInRole()会接受像IsUserInRole(&#34; superadmin&#34;)这样的单个参数来检查会话中的当前用户。我会删除用户名部分,因为您要检查当前用户而不是其他命名用户。它更快,至少会检查并消除逻辑的一部分。

你是如何播种这些角色的?