gpt4 book ai didi

asp.net-core-identity - 如何在 View 中获取 Asp.net Core 身份用户

转载 作者:行者123 更新时间:2023-12-05 08:54:24 25 4
gpt4 key购买 nike

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

最佳答案

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

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

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

现在,如果您确实想显示有关已登录用户的其他信息,例如在您的站点顶部导航中显示名称,我认为 ViewComponent` 就该发挥作用了!

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

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

    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 下定义 View 背后的模型。

    public class TopNavbarViewModel
    {
    public string DisplayName { get; set; }
    public string Email { get; set; }
    public string Phone { get; set; }
    }
  4. 定义 View 组件的 View ,按照惯例需要在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>

关于asp.net-core-identity - 如何在 View 中获取 Asp.net Core 身份用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50211213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com