【问题标题】:.NET Core 2.1 - Accessing Config/usermanager in a static helper.NET Core 2.1 - 在静态帮助程序中访问 Config/usermanager
【发布时间】:2018-11-28 11:44:13
【问题描述】:

我最近从 MVC5 迁移到 .NET Core 2.1 (MVC)。任何人都可以帮我解决这个问题。

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

在视图中,我希望能够输出当前用户名的值。 视图中的UserClaimsPrincipal,所以我需要去数据库获取我需要的值访问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 和我的连接字符串通过调用进入数据库。

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

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

这些小变化让你受益最大!

【问题讨论】:

  • 您可以将 UserManager 输入到视图中,然后将其传递给您的 GetCurrentUserFirstName 助手。
  • 欢呼@KirkLarkin - 我已经在下面发布了我的解决方案。

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


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2018-11-23
    • 1970-01-01
    • 2019-11-01
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 2019-07-15
    • 1970-01-01
    相关资源
    最近更新 更多