【问题标题】:Audit.Net: add customfieldsAudit.Net:添加自定义字段
【发布时间】:2019-05-30 01:26:37
【问题描述】:

我是使用 audit.net 的新手。 我需要从 action 方法中接收到的参数中审计一系列自定义值,如下所示。

[AuditField("User","reqLogin.User")]              
[AuditCustom(EventTypeName =  "AccesoAction")]  
public async Task<IActionResult> Acceso(LoginRequest reqLogin)
{            
     ...
}

我必须创建一个带有字段名称“用户”和值的自定义字段,参数 reqLogin (reqLogin.User) 的用户属性的值。

我正在扩展 AuditAttribute 类,以覆盖 OnActionExecutionAsync 方法并添加 CustomField。

public class AuditCustomAttribute : AuditAttribute
{
  public override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
  {
      lock (context.ActionDescriptor.Parameters)
      {
        foreach (AuditFieldAttribute apa in context.ActionDescriptor.Parameters.Cast<ControllerParameterDescriptor>().First().ParameterInfo.Member.GetCustomAttributes<AuditFieldAttribute>())
    {
           // create CustomField and add to context
    }
}   
 return base.OnActionExecutionAsync(context, next);
}
}

最后,在我的自定义 AuditDataProvider 类中,我将审核到达方法的 auditevent 字段的 customFields:

  public override object InsertEvent(AuditEvent auditEvent)

这怎么可能? 谢谢

【问题讨论】:

    标签: audit.net


    【解决方案1】:

    不清楚你在问什么,但我猜你正在使用Audit.MVC 扩展名。

    为什么需要使用 ActionParameters 上已有的信息创建一个 CustomField?

    另外,我认为您不需要继承 AuditAttribute,因为您已经可以使用 CustomAction 机制,例如:

    Audit.Core.Configuration.AddOnCreatedAction(scope =>
    {
        var action = scope.GetMvcAuditAction();
        var login = action.ActionParameters.FirstOrDefault(p => p.Key == "reqLogin").Value as LoginRequest;
        scope.SetCustomField("User", login.User);
    });
    

    【讨论】:

    • 感谢您的回复。是的,我正在使用 Audit.MVC。在 Action 中使用 scope.SetCustomField 可以解决问题,但是是否可以覆盖 OnActionExecutionAsync 以添加可以在 AuditDataProvider 自定义类中拦截的自定义参数?
    • 是的,你可以。但我想你的方法要解决的问题是将字符串 "reqLogin.User" 转换为 reqLogin.User 的属性值
    • 嗨。通过反射,我可以获得参数的值。这已经解决了,这只是一个例子。在 OnActionExecutionAsync 方法中使用 Audit.Core.Configuration.AddOnCreatedAction(scope =>...) 是否正确?非常感谢您的帮助
    • 不,这是不正确的。 AddOnCreatedAction 应该只调用一次,即在您的启动代码中
    • 好的,那么,在 OnActionExecutionAsync 方法中添加自定义字段的最佳方法是什么?我看到了如何在同一范围内从控制器的 Action 方法和 OnActionExecutionAsync 方法添加自定义字段。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多