练习 - 在 Azure 应用程序配置实例中实现配置设置

已完成

现在一项对应用程序的新要求是,允许功能标志控制产品的折扣。 此练习将展示如何这样做。

  • 将配置设置添加到 Azure 应用程序配置实例。
  • 添加代码以使用新设置来给产品打折。
  • 生成并测试应用。

将配置设置添加到应用程序配置存储

在 Azure 应用程序配置中,现在创建新的键值对来存储销售折扣百分比。 完成以下步骤:

  1. 在另一个浏览器选项卡中,使用与 Azure CLI 相同的帐户和目录登录到 Azure 门户
  2. 使用搜索框查找并打开以 eshop-app-features 为前缀的应用程序配置资源。
  3. 在“操作”部分中,选择“配置资源管理器”。
  4. 在顶部菜单中,依次选择“+ 创建”和“键值”。
  5. “密钥”文本框中,输入 eShopLite__Store__DiscountPercent
  6. 在“值”文本框中,输入 0.8
  7. 选择“应用”。

添加代码以使用新配置设置

需要更新产品页才能使用新的配置设置。 请完成下列步骤:

  1. 在 Visual Studio Code 中,打开 Store/Components/Pages/Products.razor 文件。

  2. @code 部分中,添加以下变量以存储功能标志的状态:

    private decimal discountPercentage;  
    
  3. OnInitializedAsync 方法中,添加以下代码以检索配置设置的值:

    if (saleOn) {
      discountPercentage = Convert.ToDecimal(Configuration.GetSection("eShopLite__Store__DiscountPercent").Value);
    }
    

    该方法现在应如以下代码所示:

    protected override async Task OnInitializedAsync()
    {
        saleOn = await FeatureManager.IsEnabledAsync("SeasonalDiscount");
    
        // Simulate asynchronous loading to demonstrate streaming rendering
        products = await ProductService.GetProducts();
    
        if (saleOn) {
          discountPercentage = Convert.ToDecimal(Configuration.GetSection("eShopLite__Store__DiscountPercent").Value);
        }
    }
    

    上述代码使用 Configuration 对象检索配置设置的值。 该值以十进制形式存储在变量 discountPercentage 中。

显示折扣价格

需要更新产品页面才能显示折扣价格。 请完成下列步骤:

  1. <td>@product.Price</td> 替换为以下代码:

    <td>
      @if (saleOn) {
        <strike>@(product.Price)</strike><br>
        @((product.Price * discountPercentage).ToString("#.##"))
      } else {
        @product.Price
      }
    </td>
    

    上述代码检查是否启用了季节性销售。 如果启用了季节性销售,则会划掉显示的原始价格,并将折扣价格显示在其下方。 如果未启用季节性销售,将显示原始价格。

生成应用

  1. 确保已保存所有更改,并且位于 dotnet-feature-flags 目录中。 在终端中运行以下命令:

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  2. 使用 docker 运行应用:

    docker compose up
    

测试价格折扣功能

若要验证功能标志在 codespace 中按预期工作,请完成以下步骤:

  1. 切换到“端口”选项卡,然后在“前端”端口的本地地址右侧,选择地球图标。 浏览器将在主页上打开一个新选项卡。
  2. 选择“产品”。

如果你在本地使用 Visual Studio Code,请打开 http://localhost:32000/products

A screenshot of the application showing discounted prices.

若要测试功能标志是否控制季节性销售,请完成以下步骤:

  1. 在 Azure 门户中,导航到前缀为 eshop-app-features 的 Azure 应用程序配置资源。

  2. 在“操作”部分中,选择“功能管理器”。

  3. 选择 SeasonalDiscount 的切换开关以关闭此功能。

    A screenshot showing the Azure portal page for App Configuration. The SeasonalDiscount is disabled.

  4. 在浏览器中,返回到应用程序。

  5. 选择“主页”,然后选择“产品”页。

    A screenshot showing the eShopLite app without a sales banner.

清除缓存最多可能需要 30 秒。 如果仍显示促销横幅,请等待几秒钟,然后再次刷新页面。