我正在尝试为每个控制器创建审核日志,以便可以跟踪调用的操作。我正在使用.net core和Castle Core动态代理。
class AuditInterceptor : IInterceptor
{
private readonly IAuditingHelper _auditingHelper;
public AuditingInterceptor(IAuditingHelper auditingHelper)
{
_auditingHelper = auditingHelper;
}
public void Intercept(IInvocation invocation)
{
invocation..Proceed();
log.info(audit); // elided
}
}
如何拦截每个Controller?我可以使用简单注射器或Autofac。
我对过滤器不感兴趣的原因是我有4500次操作。我不想装饰它们全部。
答案 0 :(得分:1)
您可以为此使用action filer。您可以从ActionDescriptor
检索有关控制器和正在执行的动作的有用信息。例如:
public class AuditAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
var actionDescriptor = (ControllerActionDescriptor)context.ActionDescriptor;
var controllerName = actionDescriptor.ControllerName;
var actionName = actionDescriptor.ActionName;
var parameters = actionDescriptor.Parameters;
var fullName = actionDescriptor.DisplayName;
}
}
您可以使用控制器/动作上的属性注册动作过滤器:
[Audit]
public async Task<IActionResult> Get()
{
}
或在应用程序启动时全局(每次操作):
services.AddMvc(c => c.Filters.Add(new AuditAttribute()));