如何在Episerver定时任务中获取管理员登录详细信息?
在Episerver定时任务中获取管理员详细信息的方法
在Episerver里要获取登录管理员的邮箱、ID等详细信息,仅靠PrincipalInfo.CurrentPrincipal.Identity.Name只能拿到用户名,得借助Episerver的用户管理服务查询完整用户对象,具体分两种版本场景:
针对Episerver CMS 12+(ASP.NET Core)
- 注入依赖:在定时任务类中注入
UserManager<IdentityUser>服务。 - 查询用户详情:通过用户名从UserManager中获取完整用户对象,示例代码:
using EPiServer.Security; using Microsoft.AspNetCore.Identity; public class YourScheduledJob { private readonly UserManager<IdentityUser> _userManager; public YourScheduledJob(UserManager<IdentityUser> userManager) { _userManager = userManager; } public async Task ExecuteAsync() { var currentUserName = PrincipalInfo.CurrentPrincipal.Identity.Name; if (!string.IsNullOrEmpty(currentUserName)) { var user = await _userManager.FindByNameAsync(currentUserName); if (user != null) { var userId = user.Id; var email = user.Email; var displayName = await _userManager.GetDisplayNameAsync(user); // 这里可获取并使用其他用户属性 } } } }
针对Episerver CMS 11及更早版本(.NET Framework)
- 注入依赖:注入
IUserRepository服务。 - 查询用户详情:通过用户名获取
User对象,示例代码:
using EPiServer.Security; using EPiServer.ServiceLocation; public class YourScheduledJob { private readonly IUserRepository _userRepository; public YourScheduledJob() { _userRepository = ServiceLocator.Current.GetInstance<IUserRepository>(); } public string Execute() { var currentUserName = PrincipalInfo.CurrentPrincipal.Identity.Name; if (!string.IsNullOrEmpty(currentUserName)) { var user = _userRepository.FindUsersByUserName(currentUserName).FirstOrDefault(); if (user != null) { var userId = user.ID; var email = user.Email; var displayName = user.DisplayName; // 处理后续业务逻辑 } } return "任务执行完成"; } }
注意事项
- 确保定时任务运行时存在有效用户上下文,部分后台定时任务可能无当前登录用户,这种情况可通过
PrincipalInfo.SwitchPrincipal切换到指定管理员身份后再执行逻辑。 - 若需自定义用户属性,可通过扩展
IdentityUser(CMS12+)或User(旧版本)添加字段,再通过对应服务获取。
内容的提问来源于stack exchange,提问作者Ms1
相关产品推荐
相关产品推荐

