如何获取具有基于属性的ASP.NET标识的所有用户



我尝试了一些非常简单的东西,但无论出于什么原因,它都不起作用,因此我在这里想看看是否有什么东西能给我带来光明,但我在其他地方找不到例子或解决方案(Bing/谷歌)

问题很简单,我使用的是一个稍微修改过的ApplicationUser类:

 public class ApplicationUser : IdentityUser
{
    public virtual Guid BusinessId { get; set; }
}

使用以下助手(扩展方法):

public static Guid GetBusinessId(this IIdentity user)
    {
         var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
         var currentUser = manager.FindById(user.GetUserId());
        return currentUser.BusinessId;
    }

最后是"导致"问题的方法:

public IQueryable<ApplicationUser> Get()
    {
        var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
        Guid businessId = this.User.Identity.GetBusinessId();
        var users = userManager.Users.Where(u => u.BusinessId == businessId);
        return users;
    }

这里发生的情况是,当我查询Users时,我什么也得不到,但它至少应该得到当前登录的User,因为他有正确的businessId。

如果我在用户查询上设置一个断点,并在即时窗口上尝试类似"ToList()"或"ToList[0]"的操作,我会得到以下结果:

?users.ToList()
Count = 1
[0]: Could not evaluate expression
?users.ToList()[0]
An internal error has occurred while evaluating method System.Collections.Generic.List`1[T].get_Item().

有什么想法吗?或者有"正确"的方法吗?

感谢

看看这里如何从ASP.NET Identity获取用户列表?根据答案计算

我发现我没有将派生的ApplicationUser对象用于任何用途,所以我只是继续将它的所有用途更改为普通老用户。然后我刚刚更改了ApplicationDbContext的定义对于以下内容:

public class ApplicationDbContext : IdentityDbContext<
    User, UserClaim, UserSecret, UserLogin,
    Role, UserRole, Token, UserManagement>
{
}

现在我可以访问用户列表:

 UsersContext = new ApplicationDbContext();
 ...
 UsersContext.Users.ToList();

然而,我认为这会在未来再次困扰我(我会可能需要向User添加更多字段),所以我可能必须使用与这个问题相同的方法:

获取ASP.NET MVC5标识系统中的所有角色名称

编辑:由于我需要添加一处新房产,我不得不恢复我的更改。因此,我继续与ASP.NET标识示例项目,并发现生成的该项目有以下路线:

IdentityManager = new AuthenticationIdentityManager(new IdentityStore());

而Sample应用程序在构造函数。所以我把它添加到我的构造函数中,重新创建了数据库然后问题就解决了。

相关内容

  • 没有找到相关文章

最新更新