Имели ли вы практический опыт использования 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 и не прятать бизнес-поведение.