如何使用Audit.NET实体框架数据提供程序保存Audit.NET WebAPI审核日志?

我难以理解Audit.NET实体框架数据提供程序的文档,难以将Audit.NET WebAPI审核日志保存到我的数据库中。

这是我设置审计配置以进行测试的方式。我在entity.ChangeType = ev.EventType的AuditEntityaction内部有一个断点,但是当我在控制器上调用已审计的操作时,这个断点永远不会被击中。

Audit.Core.Configuration.Setup()
    .UseEntityFramework(x => 
        x.AuditTypeMapper(t => typeof(AuditLog))
            .AuditEntityaction<AuditLog>((ev,entry,entity) =>
            {
                entity.ChangeType = ev.EventType;
                entity.ObjectType = entry.EntityType.Name;
                entity.PrimaryKey = "test";
                entity.TableName = "test";
                entity.UserId = entry.CustomFields[UserIdField].ToString();
            })
            .IgnoreMatchedProperties()
        );

在控制器操作上,我有装饰器:

[AuditApi(EventTypeName = "Organisation:Create",IncludeRequestBody = true,IncludeResponseBody = true)]

这是正确的吗?我对此不太清楚,请多多指教。

lkarhlkqjwr 回答:如何使用Audit.NET实体框架数据提供程序保存Audit.NET WebAPI审核日志?

实体框架数据提供程序是库Audit.EntityFramework的一部分,旨在专门存储由已审核的实体框架DbContext生成的审核。

因此,它不适用于任何其他类型的事件的WebApi事件。

Here,如果不是AuditEventEntityFramework,您将看到如何丢弃审核事件

因此,您应该创建自己的Custom Data Provider或使用SQL Data Provider

,

您可以使用 Audit.NetWebApi 包获取 WebApiAudit 日志

public static void UseAudit(this IApplicationBuilder app,IHttpContextAccessor contextAccessor)
        {
            Audit.Core.Configuration.AddCustomAction(ActionType.OnScopeCreated,scope =>
            {
              
                    var entityTrack = scope.Event.GetEntityFrameworkEvent();
                    var requestTrack = scope.Event.GetWebApiAuditAction();
                    if (entityTrack!=null)
                    {
                        foreach (var item in entityTrack.Entries)
                        {
                            scope.Event.CustomFields[Table] = item.Table;
                            scope.Event.CustomFields[Action] = item.Action;
                        }
                    }
                    else if(requestTrack!=null)
                    {
                      
                        scope.Event.CustomFields[Action] = $"{requestTrack.ActionName}:{requestTrack.ActionName}";
                        scope.Event.CustomFields[RequestBody] = requestTrack.RequestBody.Value.ToString();
                        scope.Event.CustomFields[ResponseBody] = requestTrack.ResponseBody?.Value?.ToString()?? string.Empty;
                        scope.Event.CustomFields[Exception] = requestTrack.Exception?? string.Empty;
                    }
                
            });
        }

然后把这个函数放在Startup.cs ConfigureApp

public void Configure(IApplicationBuilder app,IHostingEnvironment env,IHttpContextAccessor contextAccessor)
            {
app.UseAudit(contextAccessor);
}

使用的常量:

 private const string Table = "Table";
        private const string Action = "Action";           
        private const string RequestBody = "RequestBody";
        private const string ResponseBody = "ResponseBody";
        private const string Exception = "Exception";
本文链接:https://www.f2er.com/3152919.html

大家都在问