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



我最近从MVC5转到了.NET Core 2.1(MVC(。有人能帮我吗。

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

在视图中,我希望能够输出当前用户的名字值。视图中的UserClaimsPrincipal,所以我需要去DB获取值,我需要访问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 w/my连接字符串的调用转到DB。

我不能通过构造函数将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;
}

最新更新