Поделиться через


Включение условных функций с помощью пользовательского фильтра в приложении ASP.NET Core

Флаги компонентов могут использовать фильтры компонентов для условного включения функций. Дополнительные сведения о фильтрах компонентов см. в разделе "Включение условных функций" с помощью фильтров компонентов.

В этом руководстве показано, как реализовать пользовательский фильтр компонентов в приложении ASP.NET Core и использовать фильтр компонентов для условного включения функций.

Необходимые компоненты

Реализация настраиваемого фильтра компонентов

В хранилище конфигураций приложений флаг бета-функции имеет настраиваемый фильтр функций с именем Random. Этот фильтр имеет Percentage параметр. Чтобы реализовать фильтр компонентов, включите флаг бета-функции в зависимости от вероятности, определенной параметром Percentage .

  1. Перейдите в папку, содержащую проект приложения ASP.NET Core из краткого руководства по управлению функциями, указанного в предварительных требованиях.

  2. Добавьте файл RandomFilter.cs , содержащий следующий код:

    using Microsoft.FeatureManagement;
    
    namespace TestAppConfig
    {
        [FilterAlias("Random")]
        public class RandomFilter : IFeatureFilter
        {
            private readonly Random _random;
    
            public RandomFilter()
            {
                _random = new Random();
            }
    
            public Task<bool> EvaluateAsync(FeatureFilterEvaluationContext context)
            {
                int percentage = context.Parameters.GetSection("Percentage").Get<int>();
    
                int randomNumber = _random.Next(100);
    
                return Task.FromResult(randomNumber <= percentage);
            }
        }
    }
    

    Класс RandomFilter в предыдущем коде реализует IFeatureFilter интерфейс из библиотеки Microsoft.FeatureManagement . Интерфейс IFeatureFilter имеет один метод с именем EvaluateAsync, который вызывается при оценке флага компонента. В EvaluateAsyncфильтре функций флаг компонента включается возвращаемый trueфлаг компонента.

    В этом коде класс RandomFilter декорирован атрибутом FilterAliasAttribute, который присваивает псевдоним Random вашему фильтру. Этот псевдоним соответствует имени фильтра в флаге бета-функции в конфигурации приложений.

  3. Откройте файл Program.cs. Зарегистрируйте RandomFilter, добавив вызов метода AddFeatureFilter, как показано в следующем коде.

    // Existing code in Program.cs
    // ... ...
    
    // Add feature management to the container of services.
    builder.Services.AddFeatureManagement()
                    .AddFeatureFilter<RandomFilter>();
    
    // The rest of the existing code in Program.cs
    // ... ...
    

Применение фильтра компонентов

  1. Создайте приложение с помощью dotnet build команды. Затем запустите его с помощью dotnet run.

  2. В выходных данных команды dotnet run найдите URL-адрес, по которому веб-приложение принимает запросы. Откройте браузер и перейдите по этому URL-адресу.

  3. Обновите браузер несколько раз. Меню бета-версии иногда отображается на веб-странице, и иногда это не так. Флаг бета-функции не включен и отключен вручную. Вариация вызвана случайным числом, которое RandomFilter создается реализацией EvaluateAsync при оценке флага функции.

    Снимок экрана: браузер, открытый для localhost:7207. Текст на странице указывает данные из конфигурации приложений Azure. Меню бета-версии не отображается.

    Снимок экрана: браузер, открытый для localhost:7207. Текст на странице указывает данные из конфигурации приложений Azure. Выделено меню бета-версии.

Следующие шаги

Чтобы узнать больше о встроенных фильтрах функций, перейдите к следующим документам:

Для полного обзора возможностей библиотеки управления функциями .NET перейдите к следующему документу: