Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET身份检查用户角色不工作_C#_Asp.net_Asp.net Mvc_Asp.net Identity - Fatal编程技术网

C# ASP.NET身份检查用户角色不工作

C# ASP.NET身份检查用户角色不工作,c#,asp.net,asp.net-mvc,asp.net-identity,C#,Asp.net,Asp.net Mvc,Asp.net Identity,我有一个ASP.NETMVC5应用程序。我正在使用标准ASP.NET身份提供程序进行用户和角色管理。我使用自己的存储库项目中的IdentityUser是很重要的,但这似乎还可以。我可以注册、登录、编辑用户并管理他们的角色 我使用以下行将用户添加到角色: UserManager.AddToRole(userdetail.Id, r); db.Entry(userdetail).State = EntityState.Modified; db.SaveChanges(); 这似乎在DB级别工作 但

我有一个ASP.NETMVC5应用程序。我正在使用标准ASP.NET身份提供程序进行用户和角色管理。我使用自己的存储库项目中的IdentityUser是很重要的,但这似乎还可以。我可以注册、登录、编辑用户并管理他们的角色

我使用以下行将用户添加到角色:

UserManager.AddToRole(userdetail.Id, r);
db.Entry(userdetail).State = EntityState.Modified;
db.SaveChanges();
这似乎在DB级别工作

但是,我不能使用基于角色的身份验证,实际上是简单的身份验证

HttpContext.User.IsInRole("Administrator")
不太管用

[Authorize(Roles="Administrator")]
不太管用

[Authorize(Roles="Administrator")]
我只能使用此方法检查用户是否为管理员:

UserManager.IsInRole(userID, "Administrator").
为什么?

在我发现的每个教程中,一切都很好。不同的项目存储库可能是原因?还是ASP.NET的身份被破坏了这么多


请注意,

您的web.config中是否有此条目

    <roleManager enabled="true">
        <providers>
            <clear />
            <add connectionStringName="ApplicationServices" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" applicationName="/" />
        </providers>
    </roleManager>


另外,如果我没记错的话,在不同版本的.NET中,角色提供程序程序集有不同的命名空间。

似乎存在问题。[设计问题]

  • 角色名称在AuthorizeAttribute和User.IsInRole中区分大小写
  • UserManager.IsInRole中的角色名称不区分大小写
此外,检查是否使用了正确的角色名称进行验证

[以上基于使用以下代码执行的测试。角色名称=“Admin”,用户添加到角色“Admin”。]


如果我们将属性更改为
[Authorize(Roles=“admin”)]
,它将重定向到登录页面。

在这种情况下,您需要注销并再次登录用户

因为角色数据也存储在cookie中,
因此,您必须再次发布cookie才能使用它。

您是在谈论最新的ASP.NET MVC 5和ASP.NET标识吗?roleManager用于角色提供程序()它基本上已被弃用,并且不是ASP.NET标识作为请求。我也有同样的问题。有什么解决办法吗?答案已经公布了。接受它。您也可以通过更新安全标记来实现同样的功能,而无需再次登录和注销用户。你知道如何绕过这个问题吗?我也有同样的问题。我使用自定义用户和角色存储,但我猜应该注意,但使用管理器,而不是通过用户和注释,效果很好。这救了我的命,我不知道为什么这个答案不被接受。没有其他人提到这一点。在谷歌上查找“Identity userinrole”,你会看到不准确的“User.IsInRole”区分大小写,这只是犯罪,一定是个bug。我在自己的代码中发现了这一点,只是在浪费了大量时间后才找到了这个答案。把你的答案弄糟!我不知道为什么这个答案被接受。我在控制器上使用了Authorize属性,大小写与我的角色完全相同,拼写与我的角色完全相同,我肯定被分配到了这个角色(我通过RoleManager调用进行了检查,并查看了数据库本身),但它仍然不让我进入。这是在一个.Net核心API项目中。@ataraxia在本例中,原始问题明确指出Authorize属性和User.IsInRole不起作用,但UserManager.IsInRole起作用。这些返回不同的已知原因是区分大小写,即这个答案。在你的情况下,这可能是一个不同的问题。尝试并复制原始,即检查UserManager.IsInRole是否有效。如果UserManager(不区分大小写)也不起作用,则您会遇到与原始海报不同的问题(例如cookie中的缓存数据)。