如何根据属性为所有用户提供ASP.NET身份?

时间:2014-04-29 06:39:59

标签: c# asp.net asp.net-mvc asp.net-identity

我尝试的东西很简单,但无论出于什么原因它都不起作用,因此我在这里看看是否有东西给了我任何光线,我找不到其他地方的例子或解决方案(Bing / google)

问题很简单我使用的是稍微修改过的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;
    }

然后最后的方法是&#34;导致&#34;问题:

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;
    }

这里发生的事情是,当我查询用户时,我什么也得不到,但至少应该记录当前用户,因为他有正确的businessId。

如果我在用户查询上设置断点并尝试类似&#34; ToList()&#34;或&#34; ToList()[0]&#34;在即时窗口我得到以下内容:

?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().

任何想法为什么,或者是否有&#34;权利&#34;这样做的方式?

由于

1 个答案:

答案 0 :(得分:1)

在这里查看How to obtain a list of Users from 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 Identity Sample Project,发现生成的   项目有以下几行:

IdentityManager = new AuthenticationIdentityManager(new IdentityStore());
  

而Sample应用程序已将数据库上下文包含在   构造函数。所以我在构造函数中添加了它,重新创建了数据库   问题消失了。