gpt4 book ai didi

asp.net-core - ASP.NET Core 实体变更历史

转载 作者:行者123 更新时间:2023-12-02 16:19:23 24 4
gpt4 key购买 nike

我有很多这样的 Controller :

public class EntityController : Controller
{
private readonly IEntityRepository _entity;

public EntityController(IEntityRepository entity)
{
_entity = entity;
}

[Authorize]
[HttpPut("{id}")]
public async ValueTask<IActionResult> Put(int id, [FromBody] Entity entity)
{
if (entity == null || entity.Id != id) return BadRequest();
var updated = await _entity.Update(entity);
if (updated == null) return NotFound();
return Ok(updated);
}
}

我需要实现实体编辑(审核)历史记录。

而且,由于该方法被标记为[Authorize],我需要记录它是由哪个用户编辑的。我正在查看 Audit.NET,但没有找到方法。

最佳答案

Audit.NET EF Provider允许在保存之前自定义审计实体。这必须在启动时使用所谓的 AuditEntity Action 来完成。 :为每个被修改的实体触发的操作。

因此,您可以使此操作从当前 HttpContext 中检索用户名并将其存储在UserName中您的审计实体的属性(property)。

在您的 asp net 启动代码中,设置一种获取当前 HttpContext 的方法。并配置操作以从上下文中检索用户名:

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Add the HttpContextAccessor if needed.
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

// Get the service provider to access the http context
var svcProvider = services.BuildServiceProvider();

// Configure Audit.NET
Audit.Core.Configuration.Setup()
.UseEntityFramework(x => x
.AuditTypeNameMapper(typeName => "Audit_" + typeName)
.AuditEntityAction((evt, ent, auditEntity) =>
{
// Get the current HttpContext
var httpContext = svcProvider.GetService<IHttpContextAccessor>().HttpContext;
// Store the identity name on the "UserName" property of the audit entity
((dynamic)auditEntity).UserName = httpContext.User?.Identity.Name;
}));
}
}

假设您的审计实体有一个共同的 UserName属性。

如果您的审核实体已继承自接口(interface)或基类(包括用户名),则可以使用通用 AuditEntityAction<T>相反。

Audit.Core.Configuration.Setup()
.UseEntityFramework(x => x
.AuditTypeNameMapper(typeName => "Audit_" + typeName)
.AuditEntityAction<IUserName>((evt, ent, auditEntity) =>
{
var httpContext = svcProvider.GetService<IHttpContextAccessor>().HttpContext;
auditEntity.UserName = httpContext.User?.Identity.Name;
}));

关于asp.net-core - ASP.NET Core 实体变更历史,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49799223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com