ASP.NET Identity扩展方法以访问用户属性

时间:2014-11-10 03:16:01

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

我可以扩展方法来访问用户属性吗?

有以下方法:

User.Identity.GetUserId()
User.Identity.GetUserName()

可从视图和控制器访问。

我想用以下方法扩展此功能:

User.Identity.GetUserPhoneNumber()
User.Identity.GetUserLanguaje()

1 个答案:

答案 0 :(得分:14)

类似问题:Need access more user properties in User.Indentity由Microsoft专业人员在codeplex worklog中回答如下

  

"您可以获取User对象并执行User.Email或User.PhoneNumber,因为这些属性已挂起用户模型"

我们可以在ASP.Net标识中获取应用程序当前的User对象,如下所示,从那里你可以访问用户对象的所有属性,我们在mvc5 web-apps中遵循相同的方法。

//In Account controller like this
var currentUser = UserManager.FindById(User.Identity.GetUserId());

在其他控制器中,您需要将以下内容添加到控制器中:

  var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));

  // Get the current logged in User and look up the user in ASP.NET Identity
  var currentUser = manager.FindById(User.Identity.GetUserId()); 

现在我们可以访问所有用户道具(电话号码和语言),如下所示

var phoneNumber = currentUser.PhoneNumber;
var userLanguage = currentUser.Language;

编辑:如果您想在任何view.cshtml或_Layout.cshtml中检索相同内容,那么您应该执行以下操作

@using Microsoft.AspNet.Identity
@using Microsoft.AspNet.Identity.EntityFramework
@using YourWebApplication.Models

@{
    var phoneNumber= string.Empty;
    var userLanguage = string.Empty;
    if (User.Identity.IsAuthenticated) {
        var userStore = new UserStore<ApplicationUser>(new ApplicationDbContext());
        var manager = new UserManager<ApplicationUser>(userStore);
        var currentUser = manager.FindById(User.Identity.GetUserId());

        phoneNumber = currentUser.PhoneNumber;
        userLanguage = currentUser.Language;
    }
}