首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Audit.NET实体框架数据提供程序保存Audit.NET WebAPI审计日志?

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

Stack Overflow用户
提问于 2019-11-06 10:51:40
回答 2查看 1.5K关注 0票数 3

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

这就是我如何设置我的审计配置,只是为了测试。我在AuditEntityAction on entity.ChangeType = ev.EventType中有一个断点,但是当我在控制器上调用经过审计的操作时,这个断点就不会被击中。

代码语言:javascript
复制
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()
        );

在我的控制器操作中,我有一个装饰师:

代码语言:javascript
复制
[AuditApi(EventTypeName = "Organisation:Create", IncludeRequestBody = true, IncludeResponseBody = true)]

这是正确的吗?我对此不太清楚,我希望得到一些建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-06 17:52:24

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

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

这里您可以看到如果审计事件不是AuditEventEntityFramework,它是如何被丢弃的

因此,您应该创建自己的自定义数据提供程序,或者使用SQL数据提供程序

票数 3
EN

Stack Overflow用户

发布于 2021-06-26 19:57:10

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

代码语言:javascript
复制
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

代码语言:javascript
复制
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IHttpContextAccessor contextAccessor)
            {
app.UseAudit(contextAccessor);
}

使用的常量:

代码语言:javascript
复制
 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";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58728429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档