Упражнение. Реализация параметров конфигурации в экземпляре Конфигурация приложений Azure
Новое требование к приложению теперь позволяет флагу функции управлять скидкой для продукта. В этом упражнении показано, как это сделать.
- Добавьте параметр конфигурации в экземпляр Конфигурация приложений Azure.
- Добавьте код для использования нового параметра для скидки цен на продукты.
- Создайте и протестируйте приложение.
Добавление параметра конфигурации в хранилище Конфигурация приложений
В Конфигурация приложений Azure теперь создайте новую пару "ключ-значение", чтобы сохранить процент скидки на продажу. Выполните следующие действия:
- На другой вкладке браузера войдите на портал Azure с той же учетной записью и каталогом, что использовались для Azure CLI.
- Используйте поле поиска, чтобы найти и открыть ресурс службы "Конфигурация приложений" с префиксом eshop-app-features.
- В разделе "Операции" выберите обозреватель конфигурации.
- В верхнем меню выберите +Создать и выберите "Ключ-значение".
- В текстовом поле "Ключ" введите eShopLite__Store__DiscountPercent.
- В текстовом поле "Значение " введите 0.8.
- Выберите Применить.
Добавление кода для использования нового параметра конфигурации
Чтобы использовать новый параметр конфигурации, необходимо обновить страницу продукта. Выполните следующие действия:
Откройте файл Store/Components/Pages/Products.razor в Visual Studio Code.
@code В разделе добавьте следующую переменную, чтобы сохранить состояние флага функции:
private decimal discountPercentage;
В методе 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
как десятичное.
Отображение скидок на цены
Чтобы отобразить скидки, необходимо обновить страницу продукта. Выполните следующие действия:
Замените
<td>@product.Price</td>
следующим кодом:<td> @if (saleOn) { <strike>@(product.Price)</strike><br> @((product.Price * discountPercentage).ToString("#.##")) } else { @product.Price } </td>
Приведенный выше код проверка, если включена сезонная продажа. Если она включена, исходная цена отображается с забастовкой через, а скидка отображается под ней. Если сезонная продажа не включена, отображается исходная цена.
Создание приложения
Убедитесь, что вы сохранили все изменения и находитесь в каталоге dotnet-feature-flags . В терминале выполните следующую команду:
dotnet publish /p:PublishProfile=DefaultContainer
Запустите приложение с помощью Docker:
docker compose up
Проверка функции скидки по цене
Чтобы убедиться, что флаг функции работает должным образом в пространстве кода, выполните следующие действия.
- Перейдите на вкладку "ПОРТЫ" , а затем справа от локального адреса для порта переднего плана выберите значок глобуса. В браузере откроется новая вкладка на домашней странице.
- Выберите Продукты.
Если вы используете Visual Studio Code локально, откройте http://localhost:32000/productsего.
Чтобы проверить флаг функции, контролирует сезонную продажу, выполните следующие действия:
В портал Azure перейдите к префиксу ресурса Конфигурация приложений Azure с eshop-app-featuresпрефиксом .
В разделе "Операции" выберите диспетчер компонентов.
Выберите переключатель "СезонныйDiscount", чтобы отключить эту функцию.
В браузере вернитесь в приложение.
Выберите домашнюю страницу, а затем страницу "Продукты".
Для очистки кэша может потребоваться до 30 секунд. Если баннер продаж по-прежнему отображается, подождите несколько секунд и снова обновите страницу.