Как проводить аудит только [проверенных] методов, не имея [DisabledAudited] везде?

#aspnetboilerplate

#aspnetboilerplate

Вопрос:

Мои журналы аудита выходят из-под контроля, поэтому я решил, что хочу проверять только все запросы, которые в основном не являются Get запросом. Есть ли очень простой способ сделать это из конфигурации?

Документация здесь: https://aspnetboilerplate.com/Pages/Documents/Audit-Logging

Говорит:

Примечание: В дополнение к стандартной конфигурации аудита, MVC и ASP.NET Основные модули определяют конфигурации для включения / отключения ведения журнала аудита для действий.

Но я не смог найти больше информации о том, что именно это означает.

В качестве последнего средства я знаю, что это сработало бы, если бы я перешел к каждому классу и добавил [DisableAuditing] , а затем [Audited] к конечным точкам, не являющимся Get, но это кажется немного запутанным.

Лучшее решение: я просто хочу иметь простой способ выбирать только не GET запросы и проверять их.

Второе лучшее решение: я просто хочу, чтобы [Audited] проверялись только методы. Я не хочу идти и писать [DisabledAuditing] в каждом классе.

Ответ №1:

Вы можете создать AuditStore для этого, а затем заменить исходный AuditStore в service YourAplicationNameCoreModule

Вот пример

 public class YourAuditStore : AuditingStore
{

    public ILogger<AuditingStore> Logger { get; set; }

    private readonly IRepository<AuditLog, long> _auditLogRepository;
    private readonly ISettingManager _settingManager;

    public YourAuditStore(IRepository<AuditLog, long> auditLogRepository, ISettingManager settingManager) : base(auditLogRepository)
    {
        _auditLogRepository = auditLogRepository;
        _settingManager = settingManager;
    }

    public override async Task SaveAsync(AuditInfo auditInfo)
    {
        AuditLog auditLog = new AuditLog();

        bool logErrorsOnly = await _settingManager.GetSettingValueAsync<bool>(AppSettings.Logging.LogOnErrorsOnly);

        var exceptionMessage = auditInfo.Exception != null ? auditInfo.Exception.ToString() : null;

        if ((logErrorsOnly amp;amp; exceptionMessage != null) || !logErrorsOnly)
        {

            auditLog = await _auditLogRepository.InsertAsync(AuditLog.CreateFromAuditInfo(auditInfo));
        }


    }

}
  

Как вы можете видеть, вы можете фильтровать все, что хотите, в SaveAsync методе по мере получения AuditInfo , вы можете проверить, отличается ли метод Get , а затем сохранить

Добавьте следующий код в YourApplicationNameCoreModule PreInitialize метод on

 public override void PreInitialize()
{
   Configuration.ReplaceService<IAuditingStore, YourAuditStore>();
}