.NET Core 2.1 - 在静态助手中访问 Config/usermanager

.NET Core 2.1 - Accessing Config/usermanager in a static helper

我最近从 MVC5 转移到了 .NET Core 2.1 (MVC)。谁能帮我解决这个问题。

我有我的 ApplicationUser 并且我扩展了 model/table 来存储用户的 FirstName

在视图中,我希望能够输出当前用户的名字值。 User 在视图中是一个 ClaimsPrincipal 所以我需要去数据库获取我需要的值 访问 UserManager 来获取它.

现在,我知道我可以在控制器中获取它,但我不想每次需要时都必须创建一个 JQuery 调用来获取它它。

我想要的是能够访问它的服务器端,最好是通过静态助手 class。

在 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 通过调用转到数据库。

我无法通过构造函数将 UserManagerConnectionStrings 注入到助手中,因为它是静态的。

有没有办法访问这个静态助手中的任何一个?

让您收获最大的是微小的变化!

感谢@Kirk Larkin - 我找到了解决方案。

我不得不承认,感觉有点复杂,必须传递一些东西才能访问它们,但这是一个很好的、有效的解决方案。

观点:

@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;
}