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);
}
我尝试使用这两种方式编写自定义字段并且记录正确,但它在请求之间保留自定义字段
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);
}