我必须将审计添加到我没有编码的系统中,并且在编程时也没有考虑审计。
然后我遇到了 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/