这篇文章给大家介绍ASP.NET Core 2.0 MVC中怎么获取当前登录用户信息,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
创新互联建站 服务项目包括永春网站建设、永春网站制作 、永春网页制作以及永春网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,永春网站推广 取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到永春省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
使用Session存储当前登录的用户信息 首先,在ASP.NET Core 中使用Session,我们需要将Session注入到ASP.NET Core的管道(pipeline)中,和我们使用MVC的方式相同,在ConfigureServices(IServiceCollection services)中,添加
在Configure(IApplicationBuilder app, IHostingEnvironment env)中添加
这样,我们就可以在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://cxhlcq.com/article/ghigjp.html