成都网站建设设计

将想法与焦点和您一起共享

ASP.NETCore2.0MVC中怎么获取当前登录用户信息

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


名称栏目:ASP.NETCore2.0MVC中怎么获取当前登录用户信息
分享地址:http://chengdu.cdxwcx.cn/article/ghigjp.html