如何在AspNetBoilerplate中仅审计指定的方法或类?
解决方案:在AspNetBoilerplate中仅审计特定方法/类
AspNetBoilerplate默认全局开启审计,通过[DisableAuditing]排除不需要审计的内容。要实现仅审计指定方法/类,可按以下步骤操作:
1. 全局禁用审计
先在模块类中全局关闭审计功能:
public class YourModule : AbpModule { public override void PreInitialize() { Configuration.Auditing.IsEnabled = false; // 全局禁用审计 } // ...其他模块方法 }
2. 创建自定义[EnableAuditing]特性
官方未提供启用审计的特性,自行定义:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public class EnableAuditingAttribute : Attribute { }
3. 重写审计判断逻辑
重写AuditingHelper的ShouldSaveAudit方法,让它检查目标是否带有[EnableAuditing]特性,符合条件则生成审计日志:
public class CustomAuditingHelper : AuditingHelper { public CustomAuditingHelper(IIocResolver iocResolver, IAuditingConfiguration configuration) : base(iocResolver, configuration) { } protected override bool ShouldSaveAudit(AuditInfo auditInfo, MethodInfo methodInfo, bool defaultValue) { // 检查方法或所属类是否带有EnableAuditing特性 var hasEnableAuditingAttr = methodInfo.IsDefined(typeof(EnableAuditingAttribute), true) || methodInfo.DeclaringType.IsDefined(typeof(EnableAuditingAttribute), true); return hasEnableAuditingAttr; } }
4. 替换默认AuditingHelper
在模块的Initialize方法中,将自定义实现注册到DI容器,替换默认的AuditingHelper:
public override void Initialize() { IocManager.Register<IAuditingHelper, CustomAuditingHelper>(DependencyLifeStyle.Transient); // ...其他初始化代码 }
5. 标记需要审计的方法/类
在需要审计的类或方法上添加[EnableAuditing]特性即可:
// 审计整个类的所有方法 [EnableAuditing] public class OrderAppService : ApplicationService { public void CreateOrder(CreateOrderInput input) { // 业务逻辑 } } // 仅审计单个方法 public class UserAppService : ApplicationService { [EnableAuditing] public void ChangePassword(ChangePasswordInput input) { // 业务逻辑 } public void UpdateProfile(UpdateProfileInput input) { // 此方法不会被审计 } }
以上配置配合你已实现的MyCustomAuditStore,就能完成仅审计指定内容的需求。
内容的提问来源于stack exchange,提问作者Behzad Shirani
相关产品推荐
相关产品推荐

