Audit.Net: добавить пользовательские поля - PullRequest
1 голос
/ 29 мая 2019

Я новичок в использовании audit.net. Мне нужно проверить ряд пользовательских значений из параметров, полученных в методе действия, следующим образом.

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

Мне нужно создать CustomField с полевым именем «Пользователь» и значением, значением атрибута «Пользователь» параметра 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:

  public override object InsertEvent(AuditEvent auditEvent)

Как это было бы возможно? Спасибо

1 Ответ

1 голос
/ 29 мая 2019

Не очень понятно, о чем вы спрашиваете, но, думаю, вы используете расширение Audit.MVC .

Зачем вам нужно создавать CustomField с информацией, которая у вас уже есть в ActionParameters ?

Также я не думаю, что вам нужно создавать подкласс 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);
});
...