Контроллеры перехвата
Я пытаюсь создать журналы аудита для каждого контроллера, чтобы я мог отслеживать вызванные действия. Я использую ядро .net и Castle Core Dynamic Proxy.
class AuditInterceptor : IInterceptor
{
private readonly IAuditingHelper _auditingHelper;
public AuditingInterceptor(IAuditingHelper auditingHelper)
{
_auditingHelper = auditingHelper;
}
public void Intercept(IInvocation invocation)
{
invocation..Proceed();
log.info(audit); // elided
}
}
Как я могу перехватить каждый контроллер? Я могу использовать простой инжектор или Autofac.
Причина, по которой я не заинтересован в фильтрах, заключается в том, что у меня 4500 действий. Я не хочу украшать их всех.
1 ответ
Вы можете использовать файл действий для этого. Вы можете получить полезную информацию о контроллере и выполняемом действии из 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()));