我正在尝试用Audit.NET替换我们自己的审计系统,我已经查看了Audit.EntityFramework和https://github.com/thepirat000/Audit.NET/tree/master/src/Audit.EntityFramework的文档,但我不清楚应该在哪里添加配置设置。另外,假设我正在构建一个ASP.NET核心JWT应用程序接口,并且需要通过从RestFUL中提取用户信息来跟踪进行更改的用户,我该如何使用Audit.EntityFramework进行设置呢?
文档中有以下代码片段,用于配置订单和跟踪用户的审核:
Audit.Core.Configuration.Setup()
.UseEntityFramework(ef => ef
.AuditTypeExplicitMapper(m => m
.Map<Order, Audit_Order>()
.Map<OrderItem, Audit_OrderItem>()
.AuditEntityAction<IAudit>((evt, entry, auditEntity) =>
{
auditEntity.AuditDate = DateTime.UtcNow;
auditEntity.UserName = evt.Environment.UserName;
auditEntity.AuditAction = entry.Action; // Insert, Update, Delete
})
)
);但是,如果我要在Startup.cs中添加这一点,它将无助于跟踪每个用户对不同端点上的不同用户进行的每个调用所做的操作。你有没有关于如何使用Audit.EntityFramework来做这件事的例子?
谢谢
发布于 2020-09-20 11:20:35
你看过main Audit.NET documentation吗?
是的,设置必须在任何审计发生之前执行,所以在启动代码上应该没问题。
如果需要向审计事件添加更多信息,可以使用custom actions,它也应该在启动代码中设置。这并不意味着您必须在启动时设置该值,但您必须提供一种在启动时获取该值的方法。例如,如果您需要当前HttpContext中的内容,则可以从HttpContextAccessor中获取。例如:
public void Configure(IApplicationBuilder app, IHttpContextAccessor contextAccessor)
{
// ...
Audit.Core.Configuration.AddCustomAction(ActionType.OnScopeCreated, scope =>
{
var httpContext = contextAccessor.HttpContext;
// Add a new field
scope.Event.CustomFields["CorrelationId"] = httpContext.TraceIdentifier;
// reuse an existing field
scope.Event.Environment.UserName = GetUserFromContext(httpContext);
});
}此外,Audit.NET提供了两个库Audit.WebApi和Audit.MVC来审计Web API和/或MVC调用。
此外,还公开了一个dotnet new template,您可以使用它来快速创建一个启用了审计并使用实体框架的最小WebAPI/MVC项目。例如:
dotnet new -i Audit.WebApi.Template
dotnet new webapiaudit -Ehttps://stackoverflow.com/questions/63956417
复制相似问题