Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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# 带整数键的Identity 2.0:为什么User.IsInRole总是返回false?_C#_Asp.net Mvc - Fatal编程技术网

C# 带整数键的Identity 2.0:为什么User.IsInRole总是返回false?

C# 带整数键的Identity 2.0:为什么User.IsInRole总是返回false?,c#,asp.net-mvc,C#,Asp.net Mvc,使用Identity 2.0,我修改为使用integer作为主键,如下所示 它工作得很好,除了从控制器调用: User.IsUserInRole("admin"); 它总是返回false。我已经检查了基础表,数据很好 但是,如果我这样做: var t = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); bool ok = t.IsInRole(User.Identity.GetUserI

使用Identity 2.0,我修改为使用integer作为主键,如下所示

它工作得很好,除了从控制器调用:

User.IsUserInRole("admin");
它总是返回false。我已经检查了基础表,数据很好

但是,如果我这样做:

var t = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
bool ok = t.IsInRole(User.Identity.GetUserId<int>(), "admin");
更新2:


问题似乎出在AspNetUserRoles表中。Identity向我的扩展用户表添加了一个新列,一个外键。这对我来说似乎是多余的,因为有UserId列。问题是此列的所有值都为空。我想如果我能够理解如何重定向到UserId,一切都会很好。

尝试在用户登录时添加角色声明我解决了它:问题是我创建了一个从IdentityUser派生的类,另外我错误地启用了每类型表(TPT),添加了表名。Identity 2.0在AspNetUserRoles中添加了指向此新类型的第三列,由于该列为null,因此没有角色。
现在,我使用每个层次结构表(TPH),一切正常。

[Authorize(Roles=“admin”)]和User.IsInRole检查登录期间创建的cookie。设置未包含user.DSR角色信息的身份验证cookie的方式应该有问题,但是以下代码工作正常:var t=HttpContext.GetOwinContext().GetUserManager();bool ok=t.IsInRole(User.Identity.GetUserId(),“admin”);是的,没错,因为您直接使用该代码访问数据库。[Authorize(Roles=“admin”)]和User.IsInRole不访问数据库,而是从身份验证cookie获取信息。将您的owin启动代码张贴在您设置身份验证cookie的位置。遵循这些视频教程
Thread.CurrentPrincipal.IsInRole("admin");