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

时间:2018-11-28 11:44:14

标签: razor asp.net-core asp.net-identity

我最近从MVC5转到了.NET Core 2.1(MVC)。谁能帮我这个忙。

我有ApplicationUser,并且已经扩展了模型/表来存储用户的FirstName

在视图中,我希望能够输出当前用户的名字值。 视图中的User是一个ClaimsPrincipal,因此我需要进入数据库以获取需要访问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通过呼叫转到DB。

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

在此静态助手中是否可以访问其中任何一个?

让您获得最大收益的小变化!

1 个答案:

答案 0 :(得分:1)

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