我很难理解Audit.NET实体框架数据提供程序的文档,以便将Audit.NET WebAPI审计日志保存到我的数据库中。
这就是我如何设置我的审计配置,只是为了测试。我在AuditEntityAction on entity.ChangeType = ev.EventType中有一个断点,但是当我在控制器上调用经过审计的操作时,这个断点就不会被击中。
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)]这是正确的吗?我对此不太清楚,我希望得到一些建议。
发布于 2019-11-06 17:52:24
是库Audit.EntityFramework的一部分,旨在专门存储由已审计实体框架DbContext生成的审核。
因此,它不适用于任何其他类型事件的WebApi事件。
这里您可以看到如果审计事件不是AuditEventEntityFramework,它是如何被丢弃的
发布于 2021-06-26 19:57:10
您可以使用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://stackoverflow.com/questions/58728429
复制相似问题