.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 通过调用转到数据库。
我无法通过构造函数将 UserManager
或 ConnectionStrings
注入到助手中,因为它是静态的。
有没有办法访问这个静态助手中的任何一个?
让您收获最大的是微小的变化!
感谢@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;
}
我最近从 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 通过调用转到数据库。
我无法通过构造函数将 UserManager
或 ConnectionStrings
注入到助手中,因为它是静态的。
有没有办法访问这个静态助手中的任何一个?
让您收获最大的是微小的变化!
感谢@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;
}