Перейти к содержанию

Фильтры ресурсов: прерывание выполнения методов действий

Фильтры ресурсов - первые фильтры общего назначения в конвейере фильтров MVC.

ASP.NET Core включает в себя несколько реализаций фильтров ресурсов, например:

  • ConsumesAttribute — может использоваться для ограничения разрешенных форматов, которые может принимать метод действия, например [Consumes("application/json")], при этом запросы с неподдерживаемым форматом получат ответ 415 Unsupported Media Type;
  • DisableFormValueModelBindingAttribute — предотвращает привязку модели к данным формы в теле запроса. Это может быть полезно, если вы знаете, что метод действия будет обрабатывать загрузку крупных файлов, которой нужно будет управлять вручную1.

В коде контроллера есть строки, которые можно переделать в фильтр ресурсов, а именно

if (!IsEnabled) { return BadRequest(); }

Это — переключатель функций (feature toggle, feature flag), который можно использовать, чтобы управлять доступностью API на основе настройки или значения из БД2. В примере у нас — жёстко зашитое значение.

Вот примерная реализация FeatureEnabledAttribute:

public class FeatureEnabledAttribute : Attribute, IResourceFilter
{
    public bool IsEnabled { get; set; }
    public void OnResourceExecuting(ResourceExecutingContext context)
    {
        if (!IsEnabled)
        {
            context.Result = new BadRequestResult();
        }
    }
    public void OnResourceExecuted(ResourceExecutedContext context) { }
}

В этом примере демонстрируются следующие концепции:

  • фильтр может быть атрибутом. Им можно декорировать контроллер, методы действий и страницы Razor с помощью [FeatureEnabled(IsEnabled=true)];
  • интерфейс фильтра состоит из двух методов, и оба нужно реализовать, даже если нужен только один;
  • методы фильтра получают объект контекста, обеспечивающего, помимо прочего, доступ к HttpContext;
  • чтобы прервать выполнение конвейера, нужно задать context.Result. Фреймворк выполнит этот результат, игнорируя оставшиеся фильтры в конвейере и пропуская целиком метод действия.

  1. Подробнее о загрузке файлов см. здесь 

  2. Подробнее см. в блоге автора 


Последнее обновление : 5 ноября 2023 г.
Дата создания : 3 октября 2022 г.

Комментарии

Комментарии