温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-07-15 14:38:51 来源:亿速云 阅读:726 作者:Leah 栏目:云计算

这篇文章给大家介绍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

   /// <summary>
   /// 用户主键
   /// </summary>
   public static string UserOID
   {
       get => _session == null ? "" : _session.GetString("CurrentUser_UserOID");
       set => _session.SetString("CurrentUser_UserOID", !string.IsNullOrEmpty(value) ? value : "");
   }

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

   /// <summary>
   /// 用户姓名
   /// </summary>
   public static string UserName
   {
       get => _session == null ? "" : _session.GetString("CurrentUser_UserName");
       set => _session.SetString("CurrentUser_UserName", !string.IsNullOrEmpty(value) ? value : "");
   }

   /// <summary>
   /// 用户登录账户
   /// </summary>
   public static string UserAccount
   {
       get => _session == null ? "" : _session.GetString("CurrentUser_UserAccount");
       set => _session.SetString("CurrentUser_UserAccount", !string.IsNullOrEmpty(value) ? value : "");
   }

   /// <summary>
   /// 用户头像地址
   /// </summary>
   public static string UserImage
   {
       get => _session == null ? "" : _session.GetString("CurrentUser_UserImage");
       set => _session.SetString("CurrentUser_UserImage", !string.IsNullOrEmpty(value) ? value : "");
   }

   /// <summary>
   /// 用户角色
   /// </summary>
   public static string UserRole
   {
       get => _session == null ? "" : _session.GetString("CurrentUser_UserRole");
       set => _session.SetString("CurrentUser_UserRole", !string.IsNullOrEmpty(value) ? value : "");
   }

   /// <summary>
   /// 主页地址
   /// </summary>
   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<HomeController> 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
/// <summary>
/// 设置当前登录用户
/// </summary>
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中怎么获取当前登录用户信息就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI