Доступ к собственному свойству ApplicationUser из представления в ASP.net Core 2

4 H Mihail [2017-11-01 15:03:00]

Я расширил класс ApplicationUser чтобы иметь 2 дополнительных свойства: FirstName и LastName. Оба свойства сохраняются правильно в базе данных.

public class ApplicationUser : IdentityUser
{
    [Required]
    [StringLength(100)]
    public string FirstName { get; set; }

    [Required]
    [StringLength(100)]
    public string LastName { get; set; }
}

Я следую простому первому примеру, и этот код генерируется командой New Project с пользовательской аутентификацией:

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

@if (SignInManager.IsSignedIn(User))
{
    <form asp-area="" asp-controller="Account" asp-action="Logout" 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 out</button>
            </li>
        </ul>
    </form>
}

И вместо Hello @UserManager.GetUserName(User)! Я хотел бы сказать Hello???????.FirstName!

Я не могу найти способ получить доступ к этим дополнительным свойствам из представления. Любые предложения о том, как это сделать?

Спасибо!

asp.net-core razor asp.net-identity


1 ответ


5 Решение CalC [2017-11-05 02:58:00]

Вам нужно ввести UserManager в свою службу (или просмотреть в вашем случае). У этого есть параметр типового типа, который в вашем случае был бы ApplicationUser:

UserManager<ApplicationUser> userManager;

Затем вы можете запрашивать пользователей через свойство UserManager.Users. В качестве альтернативы, если вам нужно получить текущего пользователя и иметь свой ClaimsPrincipal вы можете использовать следующий код для извлечения соответствующего ApplicationUser:

ApplicationUser user = await UserManager.GetUserAsync(claimsPrincipal);
string firstName = user.FirstName;

Хотя я (лично) не очень увлечен этим,.NET Core поддерживает инъекцию в представления, используя следующий синтаксис.

@inject UserManager<ApplicstionUser> UserManager