我对audit.net的用法还不熟悉。我需要审核action方法中收到的参数中的一系列自定义值,如下所示。
[AuditField("User","reqLogin.User")]
[AuditCustom(EventTypeName = "AccesoAction")]
public async Task<IActionResult> Acceso(LoginRequest reqLogin)
{
...
}我必须创建一个CustomField,其值为“FieldName”,值为参数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类中,我将审计到达方法的customFields字段的事件:
public override object InsertEvent(AuditEvent auditEvent)这怎么可能呢?谢谢
发布于 2019-05-30 01:26:37
不太清楚您在问什么,但我猜您使用的是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);
});https://stackoverflow.com/questions/56363907
复制相似问题