如何在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
相关产品推荐
相关产品推荐

