c# - 如何使用 Audit.Net 扩展 Audit.Mvc 设置 AuditEvent 的目标对象

标签 c# asp.net-mvc audit.net

我必须将审计添加到我没有编码的系统中,并且在编程时也没有考虑审计。

然后我遇到了 Audit.Net,这是一个多么棒的框架!

我也在使用 Audit.Mvc 扩展。

无论如何,我想在 HomeController 中添加一个 Target 对象到 AuditEvent 对象。我有这个:

[Audit]
public ActionResult CreateLeavePrerequest(LeaveRequest leaveRequest)
{...
var auditScope = this.GetCurrentAuditScope();
...
}

如何将 leaveRequest 作为目标添加到 auditScope 的 AuditEvent?

最佳答案

在当前版本中,Target 对象只能在 AuditScope 分配。创建,使用 Audit.Mvc 时您无法控制扩展名。

当然你可以像这样手动:

[Audit]
public ActionResult CreateLeavePrerequest(LeaveRequest leaveRequest)
{
    SetTargetObject(leaveRequest);

    // ... I guess here the leaveRequest object is modified
    leaveRequest.SomeProp = "NewValue";

    UpdateTargetObject(leaveRequest);
}

private void SetTargetObject(object value)
{
    var scope = this.GetCurrentAuditScope();
    scope.Event.Target = new AuditTarget
    {
        SerializedOld = scope.DataProvider.Serialize(value),
        Type = value.GetType().Name
    };
}

private void UpdateTargetObject(object value)
{
    var scope = this.GetCurrentAuditScope();
    scope.Event.Target.SerializedNew = scope.DataProvider.Serialize(value);
}

我将在下一个版本的库中提供一种重新分配 Target Getter 的方法(真的很快),因此可以简化这种用例。

但是如果你只需要一个版本的leaveRequest对象,你可以只使用 Custom Field :

[Audit]
public ActionResult CreateLeavePrerequest(LeaveRequest leaveRequest)
{
    this.GetCurrentAuditScope().SetCustomField("LeaveRequest", leaveRequest);

    // ...

}

更新

从版本 14.2.1 开始,该库公开了一个 SetTargetGetter(Func<object>) AuditScope 上的方法更新目标 getter(返回目标对象以供审核的函数)。

所以第一个例子现在可以简化为:

[Audit]
public ActionResult CreateLeavePrerequest(LeaveRequest leaveRequest)
{
    this.GetCurrentAuditScope().SetTargetGetter(() => leaveRequest);

    // ... 
    leaveRequest.SomeProp = "NewValue";
}

关于c# - 如何使用 Audit.Net 扩展 Audit.Mvc 设置 AuditEvent 的目标对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55532387/

相关文章:

c# - DX TreeList - 如何更改某些节点的颜色

c# - 禁用事件冒泡 C# wpf

c# - 卸下空闲的插槽

asp.net-mvc - 对 HttpModule 中的事件进行单元测试

asp.net-mvc - MVC3和Table以及如何生成

c# - 在 Asp.net Core 的 startup.cs 中获取用户名

entity-framework-core-2.1 - 通过迁移创建动态审计表

c# - 集成到 VS2008 时的 antlr c# 错误

c# - 使用属性名称构建 OrderBy 表达式

c# - Audit.NET Entity Framework Core - 相关实体管理