Не включать среду в сериализованные AuditEvents - PullRequest
1 голос
/ 07 января 2020

В свойстве Environment класса Audit. NET, ни одно из свойств (DomainName, MachineName и т. Д. c) нам не очень полезно и занимает много места в нашей базе данных аудита.

Чтобы удалить их, я обнаружил, что я могу сделать это:

auditScope.Event.Environment = new AuditEventEnvironment()

... или я могу поставить пользовательский ContractResolver на Audit.Core.Configuration.JsonSettings.ContractResolver, который пропускает свойство Environment .

Но есть ли лучший способ отключить свойство Environment?

1 Ответ

1 голос
/ 09 января 2020

Из опций, упомянутых в вопросе, это единственный, который полностью удаляет среду из сериализованных записей аудита. Другая опция сериализуется в пустой объект 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;
    }
}
...