Visualizzazione del nome utente corrente nella vista _Layout

Visualizzazione del nome utente corrente nella vista _Layout

Puoi iniettare il UserManager e SignInManager alla tua vista.

@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager

Quindi puoi verificare se l'utente effettua l'accesso con SignInManager.IsSignedIn(User) e mostra il nome utente con UserManager.GetUserName(User)

@if (SignInManager.IsSignedIn(User))
{
  <form asp-area="" asp-controller="Account" asp-action="LogOff" method="post" id="logoutForm" class="navbar-right">
   <ul class="nav navbar-nav navbar-right">
    <li>
     <a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
    </li>
    <li>
      <button type="submit" class="btn btn-link navbar-btn navbar-link">Log off</button>
    </li>
   </ul>
 </form>
}

PS. Inoltre devi aggiungere questi due using anche

@using Microsoft.AspNetCore.Identity
@using MyWebApp.Models

Per una pagina ASP.Core Razor, inietta UserManager in _Layout.cshtml

@using Microsoft.AspNetCore.Identity
@using webApp.Models
@inject UserManager<ApplicationUser> userManager
@{
    Layout = "/Pages/Shared/_Layout.cshtml";
    var user = await userManager.GetUserAsync(User);
    var displayName = user.DisplayName;
    var imagePath = user.GravatarImageUrl;
}

<h1>Manage your account</h1>

<div>
    <h4>Change your account settings</h4>
    <hr />
    <div class="row">
        <div class="col-md-3">
            <img src="@imagePath" alt="Avatar" />
            <h4>@displayName</h4>
            <partial name="_ManageNav" />
        </div>
        <div class="col-md-9">
            @RenderBody()
        </div>
    </div>
</div>

@section Scripts {
    @RenderSection("Scripts", required: false)
}