Ćwiczenie — implementowanie flagi funkcji w celu kontrolowania funkcji ASP.NET Core
W tym ćwiczeniu zaimplementuj flagę funkcji, aby przełączyć baner sprzedaży sezonowej dla aplikacji. Flagi funkcji umożliwiają przełączanie dostępności funkcji bez ponownego wdrażania aplikacji.
Użyjesz funkcji zarządzania funkcjami w bibliotece flag funkcji platformy .NET. Ta biblioteka udostępnia pomocników do implementowania flag funkcji w aplikacji. Biblioteka obsługuje proste przypadki użycia, takie jak instrukcje warunkowe, do bardziej zaawansowanych scenariuszy, takich jak warunkowe dodawanie tras lub filtrów akcji. Ponadto obsługuje filtry funkcji, które umożliwiają włączanie funkcji na podstawie określonych parametrów. Przykłady takich parametrów obejmują przedział czasu, wartości procentowe lub podzbiór użytkowników.
W trakcie tej lekcji wykonasz następujące czynności:
- Utwórz wystąpienie konfiguracji aplikacja systemu Azure.
- Dodaj flagę funkcji do magazynu App Configuration.
- Połączenie aplikację do sklepu App Configuration.
- Zmień aplikację, aby korzystała z flagi funkcji.
- Zmień stronę produktów, aby wyświetlić baner sprzedaży.
- Skompiluj i przetestuj aplikację.
Otwieranie środowiska projektowego
Możesz użyć przestrzeni kodu usługi GitHub, która hostuje ćwiczenie, lub wykonać ćwiczenie lokalnie w programie Visual Studio Code.
Aby użyć przestrzeni kodu, utwórz wstępnie skonfigurowany element GitHub Codespace za pomocą tego linku tworzenia usługi Codespace.
Utworzenie i skonfigurowanie przestrzeni kodu w usłudze GitHub trwa kilka minut. Po zakończeniu zobaczysz pliki kodu dla ćwiczenia. Kod używany w pozostałej części tego modułu znajduje się w katalogu /dotnet-feature-flags .
Aby użyć programu Visual Studio Code, sklonuj https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative repozytorium na komputer lokalny. Następnie:
- Zainstaluj wszystkie wymagania systemowe, aby uruchomić kontener deweloperski w programie Visual Studio Code.
- Upewnij się, że platforma Docker jest uruchomiona.
- W nowym oknie programu Visual Studio Code otwórz folder sklonowanego repozytorium
- Naciśnij klawisze Ctrl+Shift+P, aby otworzyć paletę poleceń.
- Wyszukiwanie: Tworzenie kontenerów: >ponowne kompilowanie i ponowne otwieranie w kontenerze
- Wybierz pozycję eShopLite — dotnet-feature-flags z listy rozwijanej. Program Visual Studio Code tworzy kontener dewelopera lokalnie.
Tworzenie wystąpienia usługi App Configuration
Wykonaj następujące kroki, aby utworzyć wystąpienie usługi App Configuration w ramach subskrypcji platformy Azure:
W nowym okienku terminalu zaloguj się do interfejsu wiersza polecenia platformy Azure.
az login --use-device-code
Wyświetl wybraną subskrypcję platformy Azure.
az account show -o table
Jeśli wybrano niewłaściwą subskrypcję, wybierz właściwą, używając polecenia az account set .
Uruchom następujące polecenie interfejsu wiersza polecenia platformy Azure, aby uzyskać listę regionów platformy Azure i skojarzona z nią nazwa:
az account list-locations -o table
Znajdź region najbliżej Ciebie i użyj go w następnym kroku, aby zastąpić
[Closest Azure region]
Uruchom następujące polecenia interfejsu wiersza polecenia platformy Azure, aby utworzyć wystąpienie usługi App Configuration:
export LOCATION=[Closest Azure region] export RESOURCE_GROUP=rg-eshop export CONFIG_NAME=eshop-app-features$SRANDOM
Musisz zmienić lokalizację na region platformy Azure blisko Siebie, na przykład eastus. Jeśli chcesz, aby inna nazwa grupy zasobów lub konfiguracji aplikacji zmieniła powyższe wartości.
Uruchom następujące polecenie, aby utworzyć grupę zasobów platformy Azure:
az group create --name $RESOURCE_GROUP --location $LOCATION
Uruchom następujące polecenie, aby utworzyć wystąpienie usługi App Configuration:
az appconfig create --resource-group $RESOURCE_GROUP --name $CONFIG_NAME --location $LOCATION --sku Free
Zostanie wyświetlona odmiana następujących danych wyjściowych:
{ "createMode": null, "creationDate": "2023-10-31T15:40:10+00:00", "disableLocalAuth": false, "enablePurgeProtection": false, "encryption": { "keyVaultProperties": null }, "endpoint": "https://eshop-app-features1168054702.azconfig.io", "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg-eshop/providers/Microsoft.AppConfiguration/configurationStores/eshop-app-features1168054702", "identity": null,
Uruchom to polecenie, aby pobrać parametry połączenia dla wystąpienia usługi App Configuration:
az appconfig credential list --resource-group $RESOURCE_GROUP --name $CONFIG_NAME --query [0].connectionString --output tsv
Ten ciąg poprzedzony prefiksem
Endpoint=
reprezentuje parametry połączenia sklepu App Configuration.Skopiuj parametry połączenia. Użyjesz go za chwilę.
Przechowywanie parametry połączenia usługi App Configuration
Teraz dodasz parametry połączenia App Configuration do aplikacji. Zakończ poniższe kroki:
Otwórz plik /dotnet-feature-flags/docker-compose.yml.
Dodaj nową zmienną środowiskową w wierszu 13.
- ConnectionStrings:AppConfig=[PASTE CONNECTION STRING HERE]
Będzie docker-compose.yml on podobny do następującego kodu YAML:
environment: - ProductEndpoint=http://backend:8080 - ConnectionStrings:AppConfig=Endpoint=https://eshop-app-features1168054702.azconfig.io;Id=<ID>;Secret=<Secret value>
Poprzedni wiersz reprezentuje parę klucz-wartość, w której ConnectionStrings:AppConfig
jest nazwą zmiennej środowiskowej. W projekcie Store dostawca konfiguracji zmiennych środowiskowych odczytuje jego wartość.
Napiwek
Parametry połączenia konfiguracji aplikacja systemu Azure zawiera wpis tajny w postaci zwykłego tekstu. W rzeczywistych aplikacjach rozważ zintegrowanie usługi App Configuration z usługą Azure Key Vault w celu bezpiecznego przechowywania wpisów tajnych. Usługa Key Vault jest poza zakresem tego modułu, ale wskazówki można znaleźć w artykule Samouczek: używanie odwołań usługi Key Vault w aplikacji ASP.NET Core.
Dodawanie flagi funkcji do magazynu App Configuration
W aplikacja systemu Azure Konfiguracja utwórz i włącz parę klucz-wartość, aby była traktowana jako flaga funkcji. Zakończ poniższe kroki:
Na innej karcie przeglądarki zaloguj się do witryny Azure Portal przy użyciu tego samego konta i katalogu co interfejs wiersza polecenia platformy Azure.
Użyj pola wyszukiwania, aby znaleźć i otworzyć zasób usługi App Configuration poprzedzony prefiksem eshop-app-features.
W sekcji Operacje wybierz pozycję Menedżer funkcji.
W górnym menu wybierz pozycję + Utwórz.
Zaznacz pole wyboru Włącz flagę funkcji.
W polu tekstowym Nazwa flagi funkcji wprowadź wartość SeasonalDiscount.
Wybierz Zastosuj.
Teraz, gdy flaga funkcji istnieje w magazynie App Configuration, Store projekt wymaga pewnych zmian w celu jej odczytania.
Przegląd kodu
Przejrzyj katalogi w okienku eksploratora w środowisku IDE. Należy pamiętać, że istnieją trzy projekty DataEntities, Productsi Store. Projekt Store jest aplikacją Platformy Blazor. Projekt Products jest biblioteką .NET Standard zawierającą usługę produktu. Projekt DataEntities jest biblioteką .NET Standard zawierającą model produktu.
Połączenie aplikacji do magazynu App Configuration
Aby uzyskać dostęp do wartości ze sklepu App Configuration w aplikacji ASP.NET Core, wymagany jest dostawca konfiguracji dla usługi App Configuration.
Zastosuj następujące zmiany do Store projektu:
W oknie terminalu przejdź do folderu Store:
cd dotnet-feature-flags/Store
Uruchom następujące polecenie, aby zainstalować pakiet NuGet zawierający dostawcę konfiguracji platformy .NET dla usługi App Configuration:
dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore dotnet add package Microsoft.FeatureManagement.AspNetCore dotnet add package Microsoft.Extensions.Configuration.AzureAppConfiguration
Otwórz plik Store/Program.cs.
Dodaj nowe odwołania do pakietu w górnej części pliku:
using Microsoft.FeatureManagement; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.AzureAppConfiguration;
Dodaj ten kod poniżej // Dodaj komentarz kodu AddAzureAppConfiguration.
// Retrieve the connection string var connectionString = builder.Configuration.GetConnectionString("AppConfig"); // Load configuration from Azure App Configuration builder.Configuration.AddAzureAppConfiguration(options => { options.Connect(connectionString) .UseFeatureFlags(); }); // Register the Feature Management library's services builder.Services.AddFeatureManagement(); builder.Services.AddAzureAppConfiguration();
W poprzednim fragmencie kodu:
- Metoda
Connect
uwierzytelnia się w magazynie App Configuration. Pamiętaj, że parametry połączenia jest przekazywana jako zmienna środowiskowaConnectionStrings:AppConfig
. - Metoda
UseFeatureFlags
umożliwia bibliotece zarządzania funkcjami odczytywanie flag funkcji ze sklepu App Configuration. - Te dwa
builder.Services
wywołania rejestrują usługi biblioteki zarządzania funkcjami za pomocą kontenera wstrzykiwania zależności aplikacji.
- Metoda
W dolnej części pliku poniżej // Dodaj oprogramowanie pośredniczące App Configuration dodaj następujący kod:
app.UseAzureAppConfiguration();
Powyższy kod dodaje oprogramowanie pośredniczące App Configuration do potoku żądania. Oprogramowanie pośredniczące wyzwala operację odświeżania parametrów zarządzania funkcjami dla każdego przychodzącego żądania.
AzureAppConfiguration
Następnie do dostawcy należy podjęcie decyzji na podstawie ustawień odświeżania, kiedy rzeczywiście połączyć się z magazynem, aby uzyskać wartości.
Włączanie baneru sprzedaży
Aplikacja może teraz odczytać flagę funkcji, ale strona produktów musi zostać zaktualizowana, aby pokazać, że sprzedaż jest włączona. Zakończ poniższe kroki:
Otwórz plik Store/Components/Pages/Products.razor.
W górnej części pliku dodaj następujący kod:
@using Microsoft.FeatureManagement @inject IFeatureManager FeatureManager
Powyższy kod importuje przestrzenie nazw biblioteki zarządzania funkcjami i wprowadza
IFeatureManager
interfejs do składnika.@code W sekcji dodaj następującą zmienną, aby przechowywać stan flagi funkcji:
private bool saleOn = false;
W metodzie OnInitializedAsync dodaj następujący kod:
saleOn = await FeatureManager.IsEnabledAsync("SeasonalDiscount");
Metoda powinna wyglądać podobnie do następującego kodu:
protected override async Task OnInitializedAsync() { saleOn = await FeatureManager.IsEnabledAsync("SeasonalDiscount"); // Simulate asynchronous loading to demonstrate streaming rendering products = await ProductService.GetProducts(); }
W wierszu 26 pod komentarzem <!-- Add a sales alert for customers --> dodaj następujący kod:
<!-- Add a sales alert for customers --> @if (saleOn) { <div class="alert alert-success" role="alert"> Our sale is now on. </div> }
Powyższy kod wyświetla alert dotyczący sprzedaży, jeśli flaga funkcji jest włączona.
Tworzenie aplikacji
Upewnij się, że wszystkie zmiany zostały zapisane i znajdują się w katalogu dotnet-feature-flags . W terminalu uruchom następujące polecenie:
dotnet publish /p:PublishProfile=DefaultContainer
Uruchom aplikację przy użyciu platformy Docker:
docker compose up
Testowanie flagi funkcji
Aby sprawdzić, czy flaga funkcji działa zgodnie z oczekiwaniami w przestrzeni kodu, wykonaj następujące kroki:
- Przejdź do karty PORTY, a następnie po prawej stronie adresu lokalnego dla portu frontonu wybierz ikonę globusa. Przeglądarka otwiera nową kartę na stronie głównej.
- Wybierz produkty.
Jeśli używasz programu Visual Studio Code lokalnie, otwórz plik http://localhost:32000/products.
W witrynie Azure Portal możesz włączyć i wyłączyć flagę funkcji oraz odświeżyć stronę produktów, aby zobaczyć flagę w akcji.