예제 #1
0
        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");
            }
        }