在ASP.NET Boilerplate中为应用程序服务配置审核日志记录

时间:2018-10-23 19:52:49

标签: c# asp.net-core configuration aspnetboilerplate audit-logging

我试图确定是否有一种方法可以删除默认情况下ASP.NET Boilerplate代码中提供的审核日志记录。

查看文档,似乎可以使用以下 从“审核”配置中删除选择器,但不能。

Configuration.Auditing.Selectors.Clear()

原因是,例如,如果要保留审核功能,而只想审核某些服务,而不是所有IApplicationService类型的服务。

我试图将以上代码放入各种模块中,但都没有成功。所有服务呼叫都记录在AbpAuditLogs表中。

1 个答案:

答案 0 :(得分:2)

背景

  

ASP.NET Boilerplate提供了用于创建应用程序服务的基础结构。

     

CreateControllersForAppServices 方法获取程序集,并将所有应用程序服务转换为该程序集中的MVC控制器。

     

ABP为ASP.NET Core定义了一些预先构建的过滤器。默认情况下,所有这些都添加到所有控制器的所有操作中。

https://aspnetboilerplate.com/Pages/Documents/AspNet-Core

问题

Configuration.Auditing.Selectors.Clear()处理AuditingInterceptor而不是操作过滤器。

AbpAuditActionFilterdefaultValue作为true传递到_auditingHelper.ShouldSaveAudit(...)

AuditingHelper最终返回了defaultValue

解决方法

我们无法轻松替换AbpAuditActionFilter,但是我们可以替换AuditingHelper

  1. 复制AuditingHelper并将其重命名为IgnoreDefaultAuditingHelper

  2. 修改AuditingHelper.ShouldSaveAudit的最后一行以忽略defaultValue

    public bool ShouldSaveAudit(MethodInfo methodInfo, bool defaultValue = false)
    {
        // ...
    
        return false;
        // return defaultValue;
    }
    
  3. 在模块的IAuditingHelper方法中替换PreInitialize

    public override void PreInitialize()
    {
        Configuration.ReplaceService<IAuditingHelper, IgnoreDefaultAuditingHelper>();
    }