You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Audit Trail数据中忽略ActionParameters

移除Audit.NET审计记录中的ActionParameters字段

针对ASP.NET Core 3.1 Web API中使用Middleware+Action Filters集成Audit.NET的场景,以下几种方案可以实现不捕获ActionParameters字段:

方案1:通过配置选项直接屏蔽(最简洁)

利用AuditActionFilterOptions的ActionParametersConverter,将参数转换为null,从而跳过该字段的输出:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();

    // 注册Audit Action Filter并配置屏蔽ActionParameters
    services.AddMvcAuditFilter(options =>
    {
        // 将ActionParameters转换为null,审计记录中就不会包含该字段
        options.ActionParametersConverter = (context) => null;
    });

    // 配置Audit Middleware及输出目标(示例为文件日志)
    services.AddAuditMiddleware(_ => _
        .IncludeRequestBody()
        .IncludeResponseBody());

    Audit.Core.Configuration.Setup()
        .UseFileLogProvider(_ => _
            .Directory(@"C:\AuditLogs")
            .FilenameBuilder(ev => $"Audit_{DateTime.Now:yyyyMMdd}.json"));
}

方案2:自定义AuditActionFilter重写逻辑

继承默认的AuditActionFilter,在创建审计范围时仅包含需要的字段,主动排除ActionParameters:

using Audit.WebApi;
using Microsoft.AspNetCore.Mvc.Filters;
using System.Threading.Tasks;

public class CustomAuditActionFilter : AuditActionFilter
{
    protected override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
    {
        // 构建审计事件时仅保留必要字段,不包含ActionParameters
        var auditScope = await AuditScope.CreateAsync("WebApiAction", () => new
        {
            Controller = context.Controller.GetType().Name,
            Action = context.ActionDescriptor.DisplayName,
            HttpMethod = context.HttpContext.Request.Method,
            RequestPath = context.HttpContext.Request.Path
            // 添加其他需要的审计字段,按需扩展
        });

        try
        {
            await next();
        }
        finally
        {
            await auditScope.SaveAsync();
        }
    }
}

然后在Startup中替换默认过滤器:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers(options =>
    {
        // 移除默认的AuditActionFilter
        var defaultFilter = options.Filters.FirstOrDefault(f => f is AuditActionFilter);
        if (defaultFilter != null)
        {
            options.Filters.Remove(defaultFilter);
        }
        // 添加自定义过滤器
        options.Filters.Add<CustomAuditActionFilter>();
    });

    // 配置Audit Middleware及输出目标
    services.AddAuditMiddleware(_ => _
        .IncludeRequestBody()
        .IncludeResponseBody());

    Audit.Core.Configuration.Setup()
        .UseFileLogProvider(_ => _
            .Directory(@"C:\AuditLogs")
            .FilenameBuilder(ev => $"Audit_{DateTime.Now:yyyyMMdd}.json"));
}

方案3:全局事件移除字段

通过Audit.NET的全局创建事件,在审计记录生成后移除ActionParameters字段:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();

    // 配置Audit.NET全局设置
    Audit.Core.Configuration.Setup()
        .UseFileLogProvider(_ => _
            .Directory(@"C:\AuditLogs")
            .FilenameBuilder(ev => $"Audit_{DateTime.Now:yyyyMMdd}.json"))
        .AddOnCreatedAction(scope =>
        {
            // 针对WebApi审计事件,直接清空ActionParameters
            var webApiEvent = scope.Event as AuditActionEvent;
            if (webApiEvent != null)
            {
                webApiEvent.ActionParameters = null;
            }
            // 同时检查自定义字段中是否存在,存在则移除
            if (scope.Event.CustomFields.ContainsKey("ActionParameters"))
            {
                scope.Event.CustomFields.Remove("ActionParameters");
            }
        });

    // 注册默认的Audit Middleware和Action Filter
    services.AddAuditMiddleware(_ => _
        .IncludeRequestBody()
        .IncludeResponseBody());
    services.AddMvcAuditFilter();
}

内容的提问来源于stack exchange,提问作者santosh kumar patro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 22:31:14