Övning – Implementera en funktionsflagga för att styra ASP.NET Core-appfunktioner
I den här övningen implementerar du en funktionsflagga för att aktivera eller avaktivera en banderoll för säsongsförsäljning för din applikation. Med funktionsflaggor kan du växla funktionstillgänglighet utan att distribuera om din app.
Du använder Funktionshantering i .NET-funktionsflaggabiblioteket. Det här biblioteket innehåller hjälp för att implementera funktionsflaggor i din app. Biblioteket stöder enkla användningsfall som villkorssatser till mer avancerade scenarier som att villkorligt lägga till vägar eller åtgärdsfilter. Dessutom har den stöd för funktionsfilter som gör att du kan aktivera funktioner baserat på specifika parametrar. Exempel på sådana parametrar är en tidsperiod, procentandelar eller en delmängd av användarna.
I den här lektionen kommer du att:
- Skapa en Azure App Configuration-instans.
 - Lägg till en funktionsflagga i App Configuration Store.
 - Anslut din app till App Configuration Store.
 - Ändra programmet så att det använder funktionsflaggan.
 - Ändra produktsidan så att en försäljningsbanderoll visas.
 - Skapa och testa appen.
 
Öppna utvecklingsmiljön
Du kan välja att använda ett GitHub-kodområde som är värd för övningen eller slutföra övningen lokalt i Visual Studio Code.
Om du vill använda ett kodområdeskapar du ett förkonfigurerat GitHub Codespace med den här länken för att skapa Codespace.
GitHub tar flera minuter att skapa och konfigurera kodområdet. När den är klar visas kodfilerna för övningen. Koden som används för resten av den här modulen finns i katalogen /dotnet-feature-flags.
Om du vill använda Visual Studio Code-klonar du https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative lagringsplatsen till den lokala datorn. Då:
- Installera alla systemkrav för att köra Dev Container i Visual Studio Code.
 - Kontrollera att Docker körs.
 - Öppna mappen för den klonade lagringsplatsen i ett nytt Visual Studio Code-fönster
 - Tryck på Ctrl+Skift+P för att öppna kommandopaletten.
 - Sök: >Dev Containers: Återställ och öppna på nytt i Container
 - Välj eShopLite – dotnet-feature-flags i listrutan. Visual Studio Code skapar din utvecklingscontainer lokalt.
 
Skapa en appkonfigurationsinstans
Utför följande steg för att skapa en appkonfigurationsinstans i din Azure-prenumeration:
Logga in på Azure CLI i det nya terminalfönstret.
az login --use-device-codeVisa din valda Azure-prenumeration.
az account show -o tableOm fel prenumeration har valts väljer du rätt med kommandot az account set.
Kör följande Azure CLI-kommando för att hämta en lista över Azure-regioner och namnet som är associerat med det:
az account list-locations -o tableLeta upp en region närmast dig och använd den i nästa steg för att ersätta
[Closest Azure region]Kör följande Azure CLI-kommandon för att skapa en App Configuration-instans:
export LOCATION=[Closest Azure region] export RESOURCE_GROUP=rg-eshop export CONFIG_NAME=eshop-app-features$SRANDOMDu måste ändra LOCATION till en Azure-region nära dig, till exempel eastus. Om du vill ha ett annat namn för resursgruppen eller appkonfigurationen ändrar du värdena ovan.
Kör följande kommando för att skapa Azure-resursgruppen:
az group create --name $RESOURCE_GROUP --location $LOCATIONKör följande kommando för att skapa en appkonfigurationsinstans:
az appconfig create --resource-group $RESOURCE_GROUP --name $CONFIG_NAME --location $LOCATION --sku FreeEn variant av följande utdata visas:
{ "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,Kör det här kommandot för att hämta anslutningssträngen för appkonfigurationsinstansen:
az appconfig credential list --resource-group $RESOURCE_GROUP --name $CONFIG_NAME --query [0].connectionString --output tsvDen här strängen med
Endpoint=representerar App Configuration Store-anslutningssträngen.Kopiera anslutningssträngen. Du kommer att använda den om en stund.
Lagra anslutningssträngen för applikationskonfigurationen
Nu ska du lägga till anslutningssträngen för App Configuration i programmet. Slutför följande steg:
Öppna filen /dotnet-feature-flags/docker-compose.yml.
Lägg till en ny miljövariabel på rad 13.
- ConnectionStrings:AppConfig=[PASTE CONNECTION STRING HERE]docker-compose.yml liknar följande YAML:
environment: - ProductEndpoint=http://backend:8080 - ConnectionStrings:AppConfig=Endpoint=https://eshop-app-features1168054702.azconfig.io;Id=<ID>;Secret=<Secret value>
Föregående rad representerar ett nyckel/värde-par, där ConnectionStrings:AppConfig är ett miljövariabelnamn. I det Store projektet läser konfigurationsprovidern för miljövariabler sitt värde.
Dricks
Anslutningssträngen för Azure App Configuration innehåller en oformaterad hemlighet. I verkliga appar bör du överväga att integrera App Configuration med Azure Key Vault för säker lagring av hemligheter. Key Vault ligger utanför omfånget för den här modulen, men du hittar vägledning i Självstudie: Använda Key Vault-referenser i en ASP.NET Core-app.
Lägg till funktionsflaggan i App Configuration Store
I Azure App Configuration skapar och aktiverar du ett nyckel/värde-par som ska behandlas som en funktionsflagga. Slutför följande steg:
På en annan webbläsarflik loggar du in på Azure-portalen med samma konto och katalog som Azure CLI.
Använd sökrutan för att hitta och öppna appkonfigurationsresursen med prefixet eshop-app-features.
I avsnittet Åtgärder väljer du Funktionshanteraren.
I den översta menyn väljer du + Skapa.
Markera kryssrutan Aktivera funktionsflagga.
I textrutan funktionsflaggnamn anger du SeasonalDiscount.
Välj Använd.
              
              
            
Nu när funktionsflaggan finns i App Configuration Store kräver Store-projektet vissa ändringar för att läsa den.
Granska kod
Granska katalogerna i utforskarfönstret i IDE. Observera att det finns tre projekt DataEntities, Productsoch Store. Det Store projektet är Blazor-appen. Projektet Products är ett .NET Standard-bibliotek som innehåller produkttjänsten. Projektet DataEntities är ett .NET Standard-bibliotek som innehåller produktmodellen.
Ansluta din app till App Configuration Store
För att få åtkomst till värden från App Configuration Store i en ASP.NET Core-app krävs konfigurationsprovidern för appkonfiguration.
Använd följande ändringar i ditt Store projekt:
I terminalfönstret går du till mappen Store:
cd dotnet-feature-flags/StoreKör följande kommando för att installera ett NuGet-paket som innehåller .NET-konfigurationsprovidern för App Configuration-tjänsten:
dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore dotnet add package Microsoft.FeatureManagement.AspNetCore dotnet add package Microsoft.Extensions.Configuration.AzureAppConfigurationÖppna filen Store/Program.cs.
Lägg till de nya paketreferenserna överst i filen:
using Microsoft.FeatureManagement; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.AzureAppConfiguration;Lägg till den här koden under kommentaren // Lägg till koden 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();I föregående kodfragment:
- Metoden 
Connectautentiserar till App Configuration Store. Kom ihåg att anslutningssträngen skickas som en miljövariabelConnectionStrings:AppConfig. - Med metoden 
UseFeatureFlagskan funktionshanteringsbiblioteket läsa funktionsflaggor från App Configuration Store. - De två 
builder.Services-anropen registrerar tjänsterna i funktionshanteringsbiblioteket i appens container för beroendeinjektion. 
- Metoden 
 Lägg till den här koden längst ned i filen // Lägg till mellanprogrammet App Configuration:
app.UseAzureAppConfiguration();Föregående kod lägger till mellanprogrammet App Configuration i begärandepipelinen. Mellanprogrammet utlöser en uppdateringsåtgärd för parametrarna för funktionshantering för varje inkommande begäran. Sedan är det upp till
AzureAppConfigurationprovidern att bestämma, baserat på uppdateringsinställningar, när den faktiskt ska ansluta till butiken för att hämta värdena.
Aktivera en banner för försäljning
Appen kan nu läsa funktionsflaggan, men produktsidan måste uppdateras för att visa att en försäljning pågår. Slutför följande steg:
Öppna filen Store/Components/Pages/Products.razor.
Lägg till följande kod överst i filen:
@using Microsoft.FeatureManagement @inject IFeatureManager FeatureManagerFöregående kod importerar funktionshanteringsbibliotekets namnområden och matar in
IFeatureManager-gränssnittet i komponenten.I avsnittet @code lägger du till följande variabel för att lagra tillståndet för funktionsflaggan:
private bool saleOn = false;Lägg till följande kod i metoden OnInitializedAsync:
saleOn = await FeatureManager.IsEnabledAsync("SeasonalDiscount");Metoden bör se ut som följande kod:
protected override async Task OnInitializedAsync() { saleOn = await FeatureManager.IsEnabledAsync("SeasonalDiscount"); // Simulate asynchronous loading to demonstrate streaming rendering products = await ProductService.GetProducts(); }Lägg till följande kod under kommentaren <!-- Add a sales alert for customers --> på rad 26:
<!-- Add a sales alert for customers --> @if (saleOn) { <div class="alert alert-success" role="alert"> Our sale is now on. </div> }Föregående kod visar en försäljningsavisering om funktionsflaggan är aktiverad.
Skapa appen
Kontrollera att du har sparat alla ändringar och finns i katalogen dotnet-feature-flags. Kör följande kommando i terminalen:
dotnet publish /p:PublishProfile=DefaultContainerKör appen med docker:
docker compose up
Testa funktionsflaggan
Kontrollera att funktionsflaggan fungerar som förväntat i ett kodområde genom att utföra följande steg:
- Växla till fliken PORTS och välj sedan globeikonen till höger om den lokala adressen för Front End-porten. Webbläsaren öppnar en ny flik på startsidan.
 - Välj Produkter.
 
Om du använder Visual Studio Code lokalt öppnar du http://localhost:32000/products.
I Azure-portalen kan du aktivera och inaktivera funktionsflaggan och uppdatera produktsidan för att se flaggan i praktiken.