Search code examples
c#asp.netasp.net-mvcasp.net-identity-2

AspNet MVC get User or Identity object by username for any user (not current user)


I have been looking for a way to get a complete Userobject based on username in the default Identity model of AspNet MVC for any user. I am using asp.net Identity 2.

Through some google searches the following is the closest I came without directly querying to the database.

var user = UserManager.Users.FirstOrDefault(u => u.UserName == userName);

However UserManager requires a generic type of UserManager<TUser> and I have no clue what gereric type I am supposed to fill out here, or how I am even supposed to make this work. I'd prefer using the default asp.net functions so I don't have to query to the database myself.


Solution

  • I'm going to assume by default you mean the set up Visual Studio gives you when you choose an ASP.NET Web Application with MVC and individual user accounts.

    You will need the following using statement

    using Microsoft.AspNet.Identity;
    

    I believe you want the FindByName method or the FindByNameAsync method. It is a generic method so you can call it like this

     var user = userManager.FindByName<ApplicationUser, string>("{the username}");
    

    where in this case the type of the user primary key is string. But you should be able to drop the generic type parameters and just call it like this

    var user = userManager.FindByName("{the username}");
    

    If you aren't using this default set up the thing to do would be to find the type that your userManager inherits from. In visual studio you can do this by hovering over the ApplicationUserManager and pressing F12. In the default case it looks like this

    public class ApplicationUserManager: UserManager<ApplicationUser>
    {
       //...
    }
    

    But whatever the type that the UserManager has is what you need.