千家信息网

ASP.NET Core 2.0 MVC中怎么获取当前登录用户信息

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章给大家介绍ASP.NET Core 2.0 MVC中怎么获取当前登录用户信息,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。使用Session存储当前登录的用户信息首先,在
千家信息网最后更新 2026年11月02日ASP.NET Core 2.0 MVC中怎么获取当前登录用户信息

这篇文章给大家介绍ASP.NET Core 2.0 MVC中怎么获取当前登录用户信息,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

使用Session存储当前登录的用户信息

首先,在ASP.NET Core 中使用Session,我们需要将Session注入到ASP.NET Core的管道(pipeline)中,和我们使用MVC的方式相同,在ConfigureServices(IServiceCollection services)中,添加

1
services.AddSession();

在Configure(IApplicationBuilder app, IHostingEnvironment env)中添加

1
app.UseSession();

这样,我们就可以在MVC中使用到Session了。当然现在也只是能在Controller中获取到Session对象,如果想在别的类文件中使用到Session对象,我们需要注入IHttpContextAccessor对象。这里,我们可以使用nuget添加Microsoft.AspNetCore.Http.Extensions这个程序集,方便我们对于Session进行操作。
因为我们采用静态类作为当前登录用户的载体,而静态类不能拥有实例构造函数,所以我采用创建一个配置方法来进行注入,CurrentUser类如下所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
public static class CurrentUser
{
#region Initialize

private static IHttpContextAccessor _httpContextAccessor;

private static ISession _session => _httpContextAccessor.HttpContext.Session;

public static void Configure(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}

#endregion

#region Attribute

///
/// 用户主键
///

public static string UserOID
{
get => _session == null ? "" : _session.GetString("CurrentUser_UserOID");
set => _session.SetString("CurrentUser_UserOID", !string.IsNullOrEmpty(value) ? value : "");
}

///
///用户编号
///

public static long UserId
{
get => _session == null ? 0 : Convert.ToInt64(_session.GetString("CurrentUser_UserId"));
set => _session.SetString("CurrentUser_UserId", value != 0 ? value.ToString() : "0");
}

///
/// 用户姓名
///

public static string UserName
{
get => _session == null ? "" : _session.GetString("CurrentUser_UserName");
set => _session.SetString("CurrentUser_UserName", !string.IsNullOrEmpty(value) ? value : "");
}

///
/// 用户登录账户
///

public static string UserAccount
{
get => _session == null ? "" : _session.GetString("CurrentUser_UserAccount");
set => _session.SetString("CurrentUser_UserAccount", !string.IsNullOrEmpty(value) ? value : "");
}

///
/// 用户头像地址
///

public static string UserImage
{
get => _session == null ? "" : _session.GetString("CurrentUser_UserImage");
set => _session.SetString("CurrentUser_UserImage", !string.IsNullOrEmpty(value) ? value : "");
}

///
/// 用户角色
///

public static string UserRole
{
get => _session == null ? "" : _session.GetString("CurrentUser_UserRole");
set => _session.SetString("CurrentUser_UserRole", !string.IsNullOrEmpty(value) ? value : "");
}

///
/// 主页地址
///

public static string UserPage
{
get => _session == null ? "" : _session.GetString("CurrentUser_UserPage");
set => _session.SetString("CurrentUser_UserPage", !string.IsNullOrEmpty(value) ? value : "");
}

#endregion
}

当我们创建好了这样一个静态类后,我们就可以在登录成功后,将当前登录的用户信息赋值给这个静态类,这样我们就可以在需要使用到的地方直接使用CurrentUser这个静态类即可。在当时实际使用后发现,想要获取到登录后存储的用户信息,则必须在Controller的构造方法中调用CurrentUser的Configure方法,无形中还是增加了许多的工作量。
Controller的构造函数示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[Area("Administrator")]
[Authorize(Policy = "Administrator")]
public class HomeController : DanvicController
{
#region Initialize

private readonly ApplicationDbContext _context;
private readonly ILogger _logger;
private readonly IHomeService _service;
private readonly IHttpContextAccessor _httpContextAccessor;
public HomeController(IHomeService service, ILogger logger, IHttpContextAccessor httpContextAccessor, ApplicationDbContext context)
{
_service = service;
_logger = logger;
_httpContextAccessor = httpContextAccessor;
_context = context;
CurrentUser.Configure(_httpContextAccessor);
}

#endregion

#region View

#endregion
}

登录成功后给CurrentUser赋值的相关代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/// 
/// 设置当前登录用户
///

public async Task SetCurrentUser(string oid, IHttpContextAccessor httpContextAccessor, ApplicationDbContext context)
{
CurrentUser.Configure(httpContextAccessor);

var user = await PSURepository.GetUserByOIDAsync(oid, context);

if (user != null)
{
string role = string.Empty;
switch (user.AccountType)
{
case 0:
role = "Administrator";
break;
case 1:
role = "Instructor";
break;
case 2:
role = "Student";
break;
}

CurrentUser.UserAccount = user.Account;
CurrentUser.UserId = user.Id;
CurrentUser.UserImage = user.ImageSrc;
CurrentUser.UserName = user.Name;
CurrentUser.UserOID = user.IdentityUserOID;
CurrentUser.UserRole = role;
CurrentUser.UserPage = user.HomePage;
}
}

关于ASP.NET Core 2.0 MVC中怎么获取当前登录用户信息就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0