Audit.NET CustomFields 在请求之间保持值

Audit.NET CustomFields keeping value between requests

我尝试使用这两种方式编写自定义字段并且记录正确,但它在请求之间保留自定义字段

public class LoggerAudit : ILoggerAudit
{
    public void AddOnSavingAction(string key, object value)
    {
        Configuration.AddOnSavingAction(scope =>
        {
            scope.SetCustomField(key, value);
            //scope.Event.CustomFields.Remove(key);
            //scope.Event.CustomFields.Add(key, value);
        });
    }
}

例如: 在第一个请求中,我的 webapi 记录了自定义字段 'field-A',但在第二个请求中,我的 webapi 不需要编写此自定义字段,但它保留在范围内,因此在我的 json[=13 中=]

我试过这个设置,但是没用

.WithAction(action =>
{                    
    action.OnEventSaved(scope => scope.Event.CustomFields = new Dictionary<string, object>());                    
});

AddOnSavingAction / OnEventSaved 附带的 custom actions 是全局附加的,将在保存前或保存后(分别)对每个和所有事件执行,因此您应该附加每个动作只需一次。

但是您的用例看起来您没有办法从审计范围派生自定义字段值,因此自定义操作将没有用。

另外我猜你正在使用 Audit.WebApi 扩展。如果是这种情况,您不需要自定义操作来添加自定义字段,因为您可以直接在您的控制器上或在任何可以获得当前 HttpContext,例如:

using Audit.WebApi;

[AuditApi]
public class UsersController : Controller
{
    public IHttpActionResult Get(string id)
    {
       //...
       var auditScope = this.GetCurrentAuditScope();
       auditScope.SetCustomField("MyField", Guid.NewGuid());
       //...
    }
}

或者只是

private void SetCustomField(HttpContext context, string key, object value)
{
    var auditScope = context.GetCurrentAuditScope();
    auditScope.SetCustomField(key, value);
}