不要在序列化的 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;
    }
}