如何将用户数据传递给EF Core拦截器?



是否可以在EF Core拦截器中获取用户数据?我想以某种方式从外部传递,但不确定是否可能。

public class AuditingInterceptor : SaveChangesInterceptor
{
public override ValueTask<InterceptionResult<int>> SavingChangesAsync(
DbContextEventData eventData, InterceptionResult<int> result,
CancellationToken cancellationToken = default)
{
//how to get user data here?
}
}

不确定需要传递哪些用户信息。下面是一个访问当前用户信息的示例。

public class AuditingInterceptor: SaveChangesInterceptor
{
private readonly ICurrentUserService _currentUserService;
public AuditingInterceptor(ICurrentUserService currentUserService)
{
_currentUserService = currentUserService;
}

public override ValueTask<InterceptionResult<int>> SavingChangesAsync(DbContextEventData eventData, InterceptionResult<int> result, CancellationToken cancellationToken = default)
{
// some logic
}
}
// The implementation for ICurrentUserService to get user info
public class CurrentUserService : ICurrentUserService
{
private readonly IHttpContextAccessor _httpContextAccessor;
public CurrentUserService(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public string? UserId => _httpContextAccessor.HttpContext?.User?.FindFirstValue(ClaimTypes.NameIdentifier);
public string? UserName => _httpContextAccessor.HttpContext?.User?.FindFirstValue(ClaimTypes.Name);
}
// Register the DI
services.AddSingleton<ICurrentUserService, CurrentUserService>();

我希望这对你有帮助。

最新更新