Sobes.tech
Назад к вопросам
Junior — Middle
55

Имели ли вы практический опыт использования Action Filter в своих проектах?

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Ожидают услышать, что Action Filter использовался на практике для вынесения сквозной логики из контроллеров: логирование, авторизация, валидация, замер времени, обработка ошибок. Важно показать понимание, что фильтр помогает сделать код чище и повторно использовать общую функциональность. Хорошо, если есть пример, где фильтр реально сократил дублирование.

Определение:

Action Filter в ASP.NET Core — это механизм, который позволяет выполнять код до и после выполнения action-метода контроллера. Его используют для внедрения общей логики, которая не относится напрямую к бизнес-логике конкретного метода. Обычно фильтры применяют на уровне метода, контроллера или глобально для всего приложения.

Пример использования:

Например, можно сделать фильтр, который логирует вход и выход из каждого action и измеряет время выполнения.

using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Logging;
using System.Diagnostics;

public class LoggingActionFilter : IActionFilter
{
    private readonly ILogger<LoggingActionFilter> _logger;
    private Stopwatch _stopwatch;

    public LoggingActionFilter(ILogger<LoggingActionFilter> logger)
    {
        _logger = logger;
    }

    public void OnActionExecuting(ActionExecutingContext context)
    {
        _stopwatch = Stopwatch.StartNew();
        _logger.LogInformation("Action {ActionName} started", context.ActionDescriptor.DisplayName);
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        _stopwatch.Stop();
        _logger.LogInformation(
            "Action {ActionName} finished in {ElapsedMs} ms",
            context.ActionDescriptor.DisplayName,
            _stopwatch.ElapsedMilliseconds);
    }
}

Пояснение кода:

Код показывает реализацию IActionFilter, который дает два момента для вмешательства: до выполнения action и после него. В OnActionExecuting запускается таймер и пишется лог о старте. В OnActionExecuted таймер останавливается и логируется время выполнения. Такой фильтр можно повесить на конкретный action, на контроллер или зарегистрировать как общий механизм через DI.

Ключевые моменты:

  • Action Filter нужен для сквозной логики, чтобы не дублировать ее в каждом action.
  • Он срабатывает до и после выполнения метода контроллера.
  • Частые сценарии: логирование, валидация, аудит, замер времени, обработка типовых ошибок.
  • Можно применять фильтр локально или глобально.
  • Для сложной логики лучше выбирать фильтры осознанно, чтобы не перегружать pipeline и не прятать бизнес-поведение.