Встречается на собеседованиях • сегодня

Что умеет Action фильтр

Action фильтры — это один из видов фильтров, которые можно применять к действиям контроллеров. Эти фильтры предоставляют разработчикам механизм для изменения или добавления логики, которая исполняется до и после вызова методов действий в контроллерах. Action фильтры являются частью более широкой системы фильтров, которая включает авторизацию, ресурс, исключение и результат фильтры.

Основные возможности:

1. Исполнение кода до и после методов контроллера:

  • Action фильтры могут выполнить код непосредственно до (`OnActionExecuting`) и сразу после (`OnActionExecuted`) вызова действия контроллера. Это позволяет вам добавлять логику обработки, например, проверку или подготовку данных, логирование, обработку ошибок, изменение аргументов метода или результатов выполнения метода.

2. Контроль над выполнением конвейера:

  • Внутри методов `OnActionExecuting` и `OnActionExecuted` можно управлять тем, как будут обрабатываться последующие фильтры или даже само выполнение действия. Например, можно прервать выполнение действия, установив результат действия в
`OnActionExecuting`.

3. Доступ к контексту HTTP:

  • Фильтры имеют доступ к контексту HTTP запроса, что позволяет анализировать входящие запросы и модифицировать исходящие ответы.

Пример:

text
```csharp
public class MyActionFilter : IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext context)
    {
        // Логика перед выполнением действия
        Console.WriteLine("Before the action executes");
        
        // Можно изменять входные параметры
        if (context.ActionArguments.ContainsKey("exampleParam"))
        {
            context.ActionArguments["exampleParam"] = "Modified";
        }
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        // Логика после выполнения действия
        Console.WriteLine("After the action executes");

        // Можно проверить исключения или изменить результат выполнения
        if (context.Exception != null)
        {
            context.ExceptionHandled = true; // Обработка исключения
            context.Result = new StatusCodeResult(500); // Установка статус кода ответа
        }
    }
}
```

Как его использовать:

Фильтры можно применять на уровне действия, контроллера или глобально для всех контроллеров:

  • Применение на уровне метода:
text
  ```csharp
  [MyActionFilter]
  public IActionResult MyAction()
  {
      return View();
  }
  ```
  • Применение на уровне контроллера:
text
  ```csharp
  [MyActionFilter]
  public class MyController : Controller
  {
      public IActionResult Index()
      {
          return View();
      }
  }
  ```
  • Глобальное применение:

В методе `ConfigureServices` в `Startup.cs` можно добавить фильтр ко всем контроллерам:

text
  ```csharp
  services.AddControllersWithViews(options =>
  {
      options.Filters.Add(new MyActionFilter());
  });
  ```

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

April 13, 2024, easyoffer

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы