AspNet MVC 通过任何用户(不是当前用户)的用户名获取用户或身份对象

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

我一直在寻找一种方法,以在 AspNet MVC 的默认身份模型中为任何用户获取基于用户名的完整用户对象。我正在使用 asp.net 身份 2.

通过一些 google 搜索,以下是我在没有直接查询数据库的情况下得到的最接近的结果。

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

但是 UserManager 需要 UserManager<TUser> 的通用类型,我不知道我应该在这里填写什么 gereric 类型,或者我什至应该如何完成这项工作。我更喜欢使用默认的 asp.net 函数,这样我就不必自己查询数据库了。

ApplicationDbContext context = new ApplicationDbContext();

string CurrentUser = User.Identity.Name;

var applicationUser = await context.Users
.Where(a => a.Email.Equals(CurrentUser)).FirstOrDefaultAsync();

我假设默认情况下您的意思是设置 Visual Studio 会在您选择时为您提供 ASP.NET 带有 MVC 和个人用户帐户的 Web 应用程序。

您将需要以下 using 语句

using Microsoft.AspNet.Identity;

我相信您需要 FindByName 方法或 FindByNameAsync 方法。这是一个通用方法,因此您可以这样调用它

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

在这种情况下,用户主键的类型是字符串。但是你应该能够删除通用类型参数并像这样调用它

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

如果您不使用此默认设置,则要做的事情就是找到您的 userManager 继承自的类型。在 visual studio 中,您可以通过将鼠标悬停在 ApplicationUserManager 上并按 F12 来执行此操作。在默认情况下,它看起来像这样

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

但无论 UserManager 的类型是什么,都是您所需要的。