Контроллеры перехвата

Я пытаюсь создать журналы аудита для каждого контроллера, чтобы я мог отслеживать вызванные действия. Я использую ядро ​​.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()));
Другие вопросы по тегам