我正在使用Audit.Net跟踪更改。很好的利布雷
通过使用Audit.EntityFramework扩展,我们可以忽略要跟踪的属性。
public class User
{
public int Id { get; set; }
[AuditIgnore]
public string Password { get; set; }
...
}但我有问题
Audit.EntityFramework扩展。只需使用我自己的自定义数据提供程序获得json格式即可。所以[AuditIgnore]不能在这里工作。password property类上的IdentityUser?这里我的自定义数据提供程序
public class MyCustomDataProvider : AuditDataProvider
{
public override object InsertEvent(AuditEvent auditEvent)
{
var AuditEventInJson = auditEvent.ToJson();
//Save into to DB;
}
}发布于 2019-01-08 06:22:42
ToJson()方法将在内部使用JSON.NET库来序列化事件,并将使用静态属性Audit.Core.Configuration.JsonSettings中的默认设置。
因此,如果您可以更改包含密码的类的代码,则可以使用JsonIgnore属性:
public class User
{
[JsonIgnore]
public string Password { get; set; }
...
}或者,如果您不能装饰该属性,则可以创建一个自定义合同补救器来一般忽略属性,例如忽略任何称为“密码”的属性:
class MyCustomResolver : DefaultContractResolver
{
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
var props = base.CreateProperties(type, memberSerialization);
return props.Where(p => p.PropertyName != "Password").ToList();
}
}要使用Audit.NET ToJson()方法,需要在Audit.NET全局配置上设置契约解析器,如下所示:
Audit.Core.Configuration.JsonSettings.ContractResolver = new MyCustomResolver();第三个选项是附加一个习俗行动,以便在事件保存之前删除要忽略的属性,例如:
Audit.Core.Configuration.AddCustomAction(ActionType.OnEventSaving, scope =>
{
var efEvent = scope.Event.GetEntityFrameworkEvent();
efEvent.Entries.ForEach(e =>
{
e.Changes.RemoveAll(ch => ch.ColumnName == "Password");
});
});https://stackoverflow.com/questions/54085290
复制相似问题