C# 用于访问用户属性的ASP.NET标识扩展方法

C# 用于访问用户属性的ASP.NET标识扩展方法,c#,asp.net-mvc,asp.net-identity,C#,Asp.net Mvc,Asp.net Identity,我可以扩展方法来访问用户属性吗 有以下几种方法: User.Identity.GetUserId() User.Identity.GetUserName() User.Identity.GetUserPhoneNumber() User.Identity.GetUserLanguaje() 可以从视图和控制器中访问 我想通过以下方法扩展此功能: User.Identity.GetUserId() User.Identity.GetUserName() User.Identity.GetUs

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

有以下几种方法:

User.Identity.GetUserId()
User.Identity.GetUserName()
User.Identity.GetUserPhoneNumber()
User.Identity.GetUserLanguaje()
可以从视图和控制器中访问

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

User.Identity.GetUserId()
User.Identity.GetUserName()
User.Identity.GetUserPhoneNumber()
User.Identity.GetUserLanguaje()
类似问题:微软专业人士在codeplex worklog上回答如下

“您可以获取用户对象并执行User.Email或User.PhoneNumber操作,因为这些属性与用户模型无关”

我们可以在ASP.Net identity中获取应用程序当前用户对象,如下所示,从那里您可以访问用户对象的所有属性,我们现在在mvc5 web应用程序中遵循相同的操作

//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()); 
编辑:如果要在任何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;
    }
}
@使用Microsoft.AspNet.Identity
@使用Microsoft.AspNet.Identity.EntityFramework
@使用webapplication.Models
@{
var phoneNumber=string.Empty;
var userLanguage=string.Empty;
if(User.Identity.IsAuthenticated){
var userStore=newuserstore(new ApplicationDbContext());
var-manager=新的UserManager(userStore);
var currentUser=manager.FindById(User.Identity.GetUserId());
phoneNumber=currentUser.phoneNumber;
userLanguage=currentUser.Language;
}
}

您可以创建从IIdentity或IPrincipal继承的自定义类来存储新属性。谢谢你的回答。Estoy tratando de poner estos datos en_Layout.cshtml可以正确执行以下操作,还是使用会话变量更好@{var-manager=new-UserManager(new-UserStore(new-ApplicationDbContext());var-currentUser=manager.FindById(User.Identity.GetUserId());}更新的问题查看最后一个编辑部分在检索用户时是否有任何开销?我的意思是,除非它以某种方式缓存它,否则它不会每次都进入数据库吗?是的,有开销!建议:准备带有所有相关道具的用户视图模型对象,并将其放在他的会话中。在特定情况下,可以从UserManager/Database刷新用户会话对象。那么遵循DRY呢?我们真的需要在所有检索用户信息的方法中编写此代码吗?