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