如何在视图中获取Asp.net核心身份用户

时间:2018-05-07 09:43:41

标签: asp.net-core-identity asp.net-core-mvc-2.0

在Asp.net核心mvc项目中,如何在View中获取当前的IdentityUser信息?

2 个答案:

答案 0 :(得分:1)

如果您只想在View上显示用户名,那么@rdhainaut说的工作正常。如果这就是您所需要的,您甚至可以使用以下内容而无需注入任何东西!

@if (User.Identity.IsAuthenticated)
{
    <div>Hello, @User.Identity.Name</div>
}

原因是,使用默认配置(假设您使用的是用户名),用户名成功登录后会存储在@User.Identity.Name中。

现在,如果您确实要显示有关已登录用户的其他信息,并且您希望在网站顶部导航中显示该信息,那么我认为使用ViewComponent时更好!

例如,假设您已在MVC项目中定义了Admin区域,并且想要创建顶部导航栏。

  1. 您在ViewComponents文件夹下创建了一个名为Admin的折叠。
  2. 创建名为TopNavbarViewComponent.cs的视图组件。

    public class TopNavbarViewComponent : ViewComponent
    {
        private readonly UserManager<IdentityUser> _userManager;
    
        // You can inject anything you want here
        public TopNavbarViewComponent(UserManager<IdentityUser> userManager)
        {
            _userManager = userManager;
        }
    
        public async Task<IViewComponentResult> InvokeAsync()
        {
            var appUser = await _userManager.FindByNameAsync(
                HttpContext.User.Identity.Name);
    
            var vm = new TopNavbarViewModel
            {
                // Just as an example... perhaps you have additional 
                // property like FirstName and LastName in your IdentityUser.
                DisplayName = appUser?.DisplayName,
                Email = appUser?.Email,
                Phone = appUser?.PhoneNumber
            };
    
            return View(vm);
        }
    }
    
  3. 定义视图扩展器ViewComponents\Models后面的模型。

    public class TopNavbarViewModel
    {
        public string DisplayName { get; set; }
        public string Email { get; set; }
        public string Phone { get; set; }
    }
    
  4. 定义视图组件的视图,按惯例需要在Areas\Admin\Views\Shared\Components\TopNavbar\Default.cshtml下。

    @model Web.UI.Areas.Admin.ViewComponents.Models.TopNavbarViewModel
    
    <nav class="navbar navbar-light">
        <ul class="navbar-nav">
            <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown">
                Hello, @Model.DisplayName
            </a>
        </ul>
    </nav>
    

答案 1 :(得分:0)

在web应用程序asp.net core mvc 2.0中,您可以使用以下代码在视图中直接使用IdentityUser对象:

@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

@if (SignInManager.IsSignedIn(User))
{
    <div>Hello @UserManager.GetUserName(User)!</div>
}