不要在序列化的 AuditEvents 中包含环境
Don't include Environment in serialised AuditEvents
在 Audit.NET 的环境 属性 中输出 none 的属性(DomainName、MachineName 等)对我们来说真的很有用,需要很多额外的 space 在我们的审计数据库中。
要删除它们,我发现我可以这样做:
auditScope.Event.Environment = new AuditEventEnvironment()
...或者我可以在 Audit.Core.Configuration.JsonSettings.ContractResolver
上放置一个自定义 ContractResolver 以跳过环境 属性.
但是有没有更好的方法来禁用环境 属性?
在问题中提到的选项中,这是唯一一个从序列化审计条目中完全删除环境的选项。另一个选项序列化为一个空的 Environment 对象(如果 Environment 设置为 null 那么你会得到一个 NullReferenceException)。
在 ConfigureServices 中将 ContractResolver 设置为 EnvironmentSkippingContractResolver:
Audit.Core.Configuration.JsonSettings.ContractResolver = EnvironmentSkippingContractResolver.Instance;
EnvironmentSkippingContractResolver 看起来像这样:
public class EnvironmentSkippingContractResolver : DefaultContractResolver
{
public static readonly EnvironmentSkippingContractResolver Instance = new EnvironmentSkippingContractResolver();
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);
property.ShouldSerialize = instance => member.Name != "Environment";
return property;
}
}
在 Audit.NET 的环境 属性 中输出 none 的属性(DomainName、MachineName 等)对我们来说真的很有用,需要很多额外的 space 在我们的审计数据库中。
要删除它们,我发现我可以这样做:
auditScope.Event.Environment = new AuditEventEnvironment()
...或者我可以在 Audit.Core.Configuration.JsonSettings.ContractResolver
上放置一个自定义 ContractResolver 以跳过环境 属性.
但是有没有更好的方法来禁用环境 属性?
在问题中提到的选项中,这是唯一一个从序列化审计条目中完全删除环境的选项。另一个选项序列化为一个空的 Environment 对象(如果 Environment 设置为 null 那么你会得到一个 NullReferenceException)。
在 ConfigureServices 中将 ContractResolver 设置为 EnvironmentSkippingContractResolver:
Audit.Core.Configuration.JsonSettings.ContractResolver = EnvironmentSkippingContractResolver.Instance;
EnvironmentSkippingContractResolver 看起来像这样:
public class EnvironmentSkippingContractResolver : DefaultContractResolver
{
public static readonly EnvironmentSkippingContractResolver Instance = new EnvironmentSkippingContractResolver();
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);
property.ShouldSerialize = instance => member.Name != "Environment";
return property;
}
}