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

Порядок выполнения фильтров

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

Порядок выполнения фильтров по умолчанию

Важно помнить, что фильтры ресурсов , действий и результатов выполняются дважды — метод *Executing до метода действия, и *Executed после метода. А фильтры страниц реализуют три метода.
Порядок выполнения фильтров по умолчанию зависит от области действия фильтра, как показано на рисунке (для фильтра ресурсов)
Pasted image 20220510182648.png
Фильтры выполняются, начиная с самой широкой области (глобальные), до самой узкой (действие) при выполнении метода *Executing. Для метода *Executed выполнение происходит в обратном порядке.
Для страниц Razor глобальные фильтры сначала выполняют методы *Executing и PageHandlerSelected, затем их же выполняют фильтры страниц. Для методов *Executed порядок обратный.

Переопределение порядка выполнения фильтров по умолчанию с помощью интерфейса IOrderedFilter

Для точного контроля порядка выполнения фильтров необходимо реализовать интерфейс IOrderedFilter:

public interface IOrderedFilter
{
    int Order { get; }
}

Конвейер фильтров упорядочивает фильтры определенного этапа сначала на основе этого значения, от наименьшего до наивысшего, затем использует порядок фильтров по умолчанию для фильтров с одинаковыми значениями. См. рисунок:
Pasted image 20220513174509.png
Все фильтры, поставляемые с ASP.NET Core, имеют Order = 0.


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

Комментарии

Комментарии