在Asp.net核心mvc项目中,如何在View中获取当前的IdentityUser信息?
答案 0 :(得分:1)
如果您只想在View上显示用户名,那么@rdhainaut说的工作正常。如果这就是您所需要的,您甚至可以使用以下内容而无需注入任何东西!
@if (User.Identity.IsAuthenticated)
{
<div>Hello, @User.Identity.Name</div>
}
原因是,使用默认配置(假设您使用的是用户名),用户名成功登录后会存储在@User.Identity.Name
中。
现在,如果您确实要显示有关已登录用户的其他信息,并且您希望在网站顶部导航中显示该信息,那么我认为使用ViewComponent
时更好!
例如,假设您已在MVC项目中定义了Admin
区域,并且想要创建顶部导航栏。
ViewComponents
文件夹下创建了一个名为Admin
的折叠。创建名为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);
}
}
定义视图扩展器ViewComponents\Models
后面的模型。
public class TopNavbarViewModel
{
public string DisplayName { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
}
定义视图组件的视图,按惯例需要在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>
}