你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:在 ASP.NET Core 应用程序中启用使用自定义筛选器的条件功能

功能标志可以使用功能筛选器有条件地启用功能。 若要了解有关功能筛选器的详细信息,请参阅教程:通过功能筛选器启用条件功能

本教程中使用的示例基于功能管理快速入门中介绍的 ASP.NET Core 应用程序。 在继续学习之前,请完成快速入门,创建具有 Beta 功能标志的 ASP.NET Core 应用程序。 完成后,必须将自定义功能筛选器添加到你的应用程序配置存储中的 Beta 功能标志。

在本教程中,你将了解如何实现自定义功能筛选器,并使用功能筛选器有条件地启用功能。

先决条件

实现自定义功能筛选器

你已在先决条件中添加了一个名为 Random 的自定义功能筛选器,其中包含你的 Beta 功能标志的 Percentage 参数。 接下来,你将实现功能筛选器,根据 Percentage 参数定义的几率启用 Beta 功能标志。

  1. 使用以下代码添加 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);
            }
        }
    }
    

    你添加了一个从 Microsoft.FeatureManagement 库实现 IFeatureFilter 接口的 RandomFilter 类。 IFeatureFilter 接口具有一个方法,名为 EvaluateAsync,每当评估功能标志时都会调用它。 在 EvaluateAsync 中,功能筛选器通过返回 true 来启用功能标志。

    你将 FilterAliasAttribute 装饰到 RandomFilter 上,从而给你的筛选器一个别名 Random,该别名与你在 Azure 应用程序配置中的 Beta 功能标志中设置的筛选器名称相匹配。

  2. 打开 Program.cs 文件,并通过调用 AddFeatureFilter 方法注册 RandomFilter

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

功能筛选器在使用中

重新启动应用程序并刷新浏览器几次。 如果不手动切换功能标志,你会看到 Beta 菜单有时会显示,有时不显示。

浏览器的屏幕截图,其中 Beta 菜单被隐藏。

包含 Beta 菜单的浏览器屏幕截图。

后续步骤

若要详细了解内置功能筛选器,请继续学习以下教程。

有关 .NET 功能管理库的完整功能概要,请继续阅读以下文档。