Middle
133
questionbank
Что такое Action фильтр и какие функции он выполняет?
Ответ от нейросети
sobes.tech AI
Action-фильтры в ASP.NET Core — это специфический тип фильтров, который перехватывает выполнение метода действия контроллера.
Основные функции:
- Перед выполнением действия: Выполняют код до того, как будет вызван метод действия контроллера (
OnActionExecuting). - После выполнения действия: Выполняют код после того, как метод действия контроллера был вызван, но до того, как будет выполнено форматирование результата (
OnActionExecuted). - Модификация контекста: Могут изменять контекст выполнения действия (
ActionExecutingContext) или контекст после выполнения (ActionExecutedContext), например, добавлять данные вHttpContext.Items, изменять маршрутизацию или устанавливать результат действия. - Обработка исключений: Не напрямую обрабатывают исключения, но могут быть использованы для установки результата ошибки, если исключение произошло на стадии
OnActionExecuting.
Примеры использования:
- Валидация данных запроса перед вызовом действия.
- Добавление заголовков или модификация тела ответа.
- Логирование информации о запросе и ответе.
- Кэширование результатов действия.
- Выполнение авторизации и аутентификации (хотя для этого чаще используются специализированные Authorization и Authentication фильтры).
Реализация: Создаются путём наследования от ActionFilterAttribute или реализации интерфейсов IActionFilter (синхронный) или IAsyncActionFilter (асинхронный).
// Пример простого синхронного Action-фильтра
public class CustomActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
// Логика перед выполнением действия
Console.WriteLine("Before action execution");
base.OnActionExecuting(context);
}
public override void OnActionExecuted(ActionExecutedContext context)
{
// Логика после выполнения действия
if (context.Exception == null && context.Result is ObjectResult objectResult)
{
// Модификация результата, если нет исключения и результат ObjectResult
Console.WriteLine($"Action result status code: {objectResult.StatusCode}");
}
Console.WriteLine("After action execution");
base.OnActionExecuted(context);
}
}
Применяются к контроллерам или отдельным методам действий с помощью атрибутов:
[CustomActionFilter] // Применение к контроллеру
public class HomeController : Controller
{
[HttpGet]
[CustomActionFilter] // Применение к методу действия
public IActionResult Index()
{
return Ok("Hello from Index!");
}
}