从HttpContext.Current.User获取AspNetUser

时间:2016-06-26 14:05:43

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

使用MVC 5.

我是UsersIdentitiesClaims的新手。

如何从AspNetUser获取HttpContext.Current.User?我知道我可以使用HttpContext.Current.User.Identity.Name(这是我系统上用户的电子邮件地址),然后点击该用户的AspNetUser表,但有更好的方法来获取{{1}来自AspNetUser我失踪了吗?例如它是否已包含在HttpContext.Current.User的某个位置?

我已经尝试过Google,但我并没有真正找到这个具体问题的答案。

2 个答案:

答案 0 :(得分:2)

AspNetUser未存储在HttpContext.Current.User属性中。 HttpContext.Current.User返回一个IPrincipal对象,在IPrincipal上指定的唯一成员是IIdentity Identity和bool IsInRole。然后,IIdentity接口为您提供Name属性,您可以使用它来查找实际的用户对象。

如果您只想要一行代码并拥有对User对象的完全访问权限,则可以使用以下代码访问AspNetUser:

ApplicationUser user = System.Web.HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.Current.User.Identity.GetUserId());

您需要以下使用声明:

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;

请注意,如果您能够通过UserManager API,可能会更好,一旦拥有了User对象,就可以通过UserManager更新方法编辑然后保存更改。可以通过UserManager方法直接进行许多更改。如果您有一个UserManager实例,您还可以通过以下方式访问User对象:

ApplicationUser user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

答案 1 :(得分:0)

重复How to get current user, and how to use User class in MVC5?

您会发现还有其他一些选项,但所有选项都与您所遵循的步骤类似:

  1. 使用Current.User获取部分信息
  2. 使用一条信息从DB
  3. 获取AspNetUser