rdh*_*aut 2 asp.net-core-identity asp.net-core-mvc-2.0
在Asp.net core mvc项目中,如何在View中获取当前的IdentityUser信息?
在 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>
}
Run Code Online (Sandbox Code Playgroud)
如果您只想在视图上显示用户名,@rdhainaut 所说的可以正常工作。如果这就是您所需要的,您甚至可以使用以下内容而无需注入任何东西!
@if (User.Identity.IsAuthenticated)
{
<div>Hello, @User.Identity.Name</div>
}
Run Code Online (Sandbox Code Playgroud)
原因是,在默认配置下(假设您使用的是用户名),用户名会在@User.Identity.Name登录成功后存储。
现在,如果您确实想显示有关登录用户的其他信息,例如站点顶部导航上的显示名称,那么我认为 ViewComponent` 就派上用场了!
例如,假设您已经Admin在 MVC 项目中定义了一个区域,并且您想要创建一个顶部导航栏。
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);
}
}
Run Code Online (Sandbox Code Playgroud)定义视图 underler 后面的模型ViewComponents\Models。
public class TopNavbarViewModel
{
public string DisplayName { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
}
Run Code Online (Sandbox Code Playgroud)定义视图组件的视图,按照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>
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
5331 次 |
| 最近记录: |