public override void OnActionExecuting(ActionExecutingContext context) { var scope = context.HttpContext.RequestServices.CreateScope(); _logger = scope.ServiceProvider.GetRequiredService <ILogger <Audit> >(); _logger.LogDebug("Executing audit filter"); _auditService = scope.ServiceProvider.GetRequiredService <IAuditService>(); if (_auditService == null) { throw new MSFrameworkException("AuditService is not registered"); } _auditUnitOfWorkManager = scope.ServiceProvider.GetService <IUnitOfWorkManager>(); var configuration = scope.ServiceProvider.GetRequiredService <IConfiguration>(); var applicationName = configuration["ApplicationName"]; applicationName = string.IsNullOrWhiteSpace(applicationName) ? Assembly.GetEntryAssembly()?.FullName : applicationName; var path = context.ActionDescriptor.GetActionPath(); var ua = context.HttpContext.Request.Headers["User-Agent"].ToString(); var ip = context.GetRemoteIpAddress(); _auditedOperation = new AuditOperation(applicationName, path, ip, ua); if (context.HttpContext.User?.Identity != null && context.HttpContext.User.Identity.IsAuthenticated && context.HttpContext.User.Identity is ClaimsIdentity identity) { _auditedOperation.SetCreation(identity.GetUserId(), identity.GetUserName()); } else { _auditedOperation.SetCreation("Anonymous", "Anonymous"); } }