.NET Core 2.1 - Доступ к Config / usermanager в статическом помощнике - PullRequest
0 голосов
/ 28 ноября 2018

Я недавно перешел с MVC5 на .NET Core 2.1 (MVC).Может ли кто-нибудь помочь мне с этим, пожалуйста.

У меня есть ApplicationUser, и я расширил модель / таблицу для хранения FirstName.

. В представлении я хочу иметь возможность вывести имя текущего пользователязначение.User в представлении - это ClaimsPrincipal, поэтому мне нужно уйти в БД, чтобы получить значение, которое мне нужно или access UserManager, чтобы получить его.

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

Я хочу иметь доступ к серверу, в идеале через статический вспомогательный класс.

В MVC5 у меня был бы помощник, чтобы выполнить работу без проблем.Например, примерно так:

public static string GetCurrentUserFirstName()
{
    string _usrRef = HttpContext.Current.User.Identity.GetUserId();
    var user = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(_usrRef);

    return user.FirstName;
}

Однако .NET Core не работает таким образом.

В контроллере я мог бы сказать:

var user = await _userManager.GetUserAsync(User);
string firstName = user.FirstName;

или я мог бы отправиться в БД через звонок, используя Dapper с моей строкой соединения.

Я могу 'Внедрить UserManager или ConnectionStrings в помощник через конструктор, поскольку он статичен.

Есть ли способ получить доступ к любому из этих статических помощников?

Это небольшие изменения, которые принесут вам больше всего!

1 Ответ

0 голосов
/ 28 ноября 2018

Спасибо @Kirk Larkin - я нашел решение.

Я должен признать, что чувствует немного более запутанную необходимость передавать вещи, чтобы получить к ним доступ, но это хорошее, рабочее решение.

The View:

@using Microsoft.AspNetCore.Identity
@using MyApplication.Helpers

@inject UserManager<ApplicationUser> UserManager

<div>
    @await MyHelper.GetLoggedInUserFirstName(UserManager, User)
</div>

Файл MyHelper:

public static async Task<string> GetLoggedInUserFirstName(UserManager<ApplicationUser> userManager, ClaimsPrincipal user)
{
    string output = "";

    try
    {
        var currentUser = await userManager.GetUserAsync(user);
        if(currentUser!=null)
        {
            output = currentUser.FirstName ?? currentUser.Email;
        }
    }
    catch(Exception e) { }

    return output;
}
...