Självstudie: Använda dynamisk konfiguration i en ASP.NET Core app
ASP.NET Core har ett anslutbart konfigurationssystem som kan läsa konfigurationsdata från olika källor. Det kan hantera ändringar dynamiskt utan att göra så att ett program startas om. ASP.NET Core stöder bindning av konfigurationsinställningar till starkt typindelade .NET-klasser. De matas in i koden med IOptionsSnapshot<T> hjälp av , som automatiskt läser in programmets konfiguration igen när underliggande data ändras.
Den här självstudien visar hur du kan implementera dynamiska konfigurationsuppdateringar i koden. Den bygger på den webbapp som introducerades i snabbstarterna. Innan du fortsätter slutför du Skapa en ASP.NET Core-app med App Configuration först.
Du kan använda valfri kodredigerare för att göra stegen i den här självstudien. Visual Studio Code är ett utmärkt alternativ som är tillgängligt på Windows, macOS och Linux.
I den här guiden får du lära dig att:
- Konfigurera programmet så att det uppdaterar konfigurationen som svar på ändringar i ett App Configuration lager.
- Mata in den senaste konfigurationen i programmets styrenheter.
Förutsättningar
Om du vill göra den här självstudien installerar du .NET Core SDK.
Om du inte har en Azure-prenumerationkan du skapa ett kostnads fritt konto innan du börjar.
Innan du fortsätter slutför du Skapa en ASP.NET Core-app med App Configuration först.
Lägga till en sentinel-nyckel
En sentinel-nyckel är en särskild nyckel som du uppdaterar när du har slutfört ändringen av alla andra nycklar. Programmet övervakar sentinel-nyckeln. När en ändring identifieras uppdaterar programmet alla konfigurationsvärden. Den här metoden hjälper till att säkerställa konsekvensen i konfigurationen i ditt program och minskar det totala antalet begäranden som görs till App Configuration, jämfört med att övervaka alla nycklar för ändringar.
- I Azure Portal väljer du Configuration Explorer > Create > Key-value.
- För Nyckel anger du TestApp:Inställningar:Sentinel. För Värde anger du 1. Lämna Etikett och Innehållstyp tomma.
- Välj Använd.
Anteckning
Om du inte använder en sentinel-nyckel måste du manuellt registrera varje nyckel som du vill övervaka.
Läsa in data på nytt från App Configuration
Lägg till en referens till
Microsoft.Azure.AppConfiguration.AspNetCoreNuGet-paketet genom att köra följande kommando:dotnet add package Microsoft.Azure.AppConfiguration.AspNetCoreÖppna Program.cs och uppdatera metoden
CreateWebHostBuilderför att lägga till metodenconfig.AddAzureAppConfiguration().public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => webBuilder.ConfigureAppConfiguration((hostingContext, config) => { var settings = config.Build(); config.AddAzureAppConfiguration(options => { options.Connect(settings["ConnectionStrings:AppConfig"]) .ConfigureRefresh(refresh => { refresh.Register("TestApp:Settings:Sentinel", refreshAll: true) .SetCacheExpiration(new TimeSpan(0, 5, 0)); }); }); }) .UseStartup<Startup>());I metoden
ConfigureRefreshregistrerar du nycklar i ditt App Configuration som du vill övervaka för ändringar. ParameternrefreshAlltill metoden anger att allaRegisterkonfigurationsvärden ska uppdateras om den registrerade nyckeln ändras. Metoden anger den minsta tid som måste gå innan en ny begäran görs för attSetCacheExpirationApp Configuration för att söka efter konfigurationsändringar. I det här exemplet åsidosätter du standardförfallotiden på 30 sekunder och anger i stället en tid på 5 minuter. Detta minskar det potentiella antalet begäranden som görs till din App Configuration store.Anteckning
I testsyfte kanske du vill sänka förfallotiden för cacheuppdateringen.
För att utlösa en konfigurationsuppdatering använder du App Configuration mellanprogram. Du får se hur du gör detta i ett senare steg.
Lägg till Inställningar.cs-fil i katalogen Controllers som definierar och implementerar en ny
Settingsklass. Ersätt namnområdet med namnet på ditt projekt.namespace TestAppConfig { public class Settings { public string BackgroundColor { get; set; } public long FontSize { get; set; } public string FontColor { get; set; } public string Message { get; set; } } }Öppna Startup.cs och uppdatera
ConfigureServicesmetoden . AnropaConfigure<Settings>för att binda konfigurationsdata till klassenSettings. AnropaAddAzureAppConfigurationför att App Configuration -komponenter i tjänstsamlingen för ditt program.public void ConfigureServices(IServiceCollection services) { services.Configure<Settings>(Configuration.GetSection("TestApp:Settings")); services.AddControllersWithViews(); services.AddAzureAppConfiguration(); }Uppdatera metoden
Configureoch lägg till ett anrop tillUseAzureAppConfiguration. Det gör att ditt program kan använda App Configuration mellanprogram för att hantera konfigurationsuppdateringar automatiskt.public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } // Add the following line: app.UseAzureAppConfiguration(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); }Anteckning
I App Configuration mellanprogram övervakas sentinel-nyckeln eller andra nycklar som du har registrerat för uppdatering
ConfigureRefreshi anropet i föregående steg. Mellanprogrammet utlöses vid varje inkommande begäran till ditt program. Mellanprogram skickar dock endast begäranden för att kontrollera värdet i App Configuration cachens förfallotid som du anger har passerat. När en ändring identifieras uppdateras antingen all konfiguration om sentinel-nyckeln används eller uppdaterar endast de registrerade nycklarnas värden.- Om en begäran om App Configuration för ändringsidentifiering misslyckas fortsätter programmet att använda den cachelagrade konfigurationen. En annan kontroll görs när den konfigurerade förfallotiden för cachen har passerat igen och det finns nya inkommande begäranden till ditt program.
- Konfigurationsuppdateringen sker asynkront på bearbetningen av inkommande programbegäranden. Den blockerar inte eller gör inte den inkommande begäran som utlöste uppdateringen långsammare. Begäran som utlöste uppdateringen kanske inte får de uppdaterade konfigurationsvärdena, men efterföljande begäranden kommer att göra det.
- För att säkerställa att mellanprogrammet utlöses anropar du så tidigt som möjligt i din pipeline för begäran så att ett annat mellanprogram inte
app.UseAzureAppConfiguration()kortsluter det i ditt program.
Använda senaste konfigurationsdata
Öppna HomeController.cs i katalogen Controllers och lägg till en referens till
Microsoft.Extensions.Optionspaketet.using Microsoft.Extensions.Options;Uppdatera klassen
HomeControllerför att ta emot viaSettingsberoendeinjektion och använd dess värden.public class HomeController : Controller { private readonly Settings _settings; private readonly ILogger<HomeController> _logger; public HomeController(ILogger<HomeController> logger, IOptionsSnapshot<Settings> settings) { _logger = logger; _settings = settings.Value; } public IActionResult Index() { ViewData["BackgroundColor"] = _settings.BackgroundColor; ViewData["FontSize"] = _settings.FontSize; ViewData["FontColor"] = _settings.FontColor; ViewData["Message"] = _settings.Message; return View(); } // ... }Tips
Mer information om alternativmönstret när du läser konfigurationsvärden finns i Alternativmönster i ASP.NET Core.
Öppna Index.cshtml i katalogen Views > Home och ersätt innehållet med följande skript:
<!DOCTYPE html> <html lang="en"> <style> body { background-color: @ViewData["BackgroundColor"] } h1 { color: @ViewData["FontColor"]; font-size: @ViewData["FontSize"]px; } </style> <head> <title>Index View</title> </head> <body> <h1>@ViewData["Message"]</h1> </body> </html>
Skapa och köra appen lokalt
Skapa appen med hjälp av .NET Core CLI kör du följande kommando i kommandogränssnittet:
dotnet buildNär bygget är klart kör du följande kommando för att köra webbappen lokalt:
dotnet runÖppna ett webbläsarfönster och gå till den URL som visas i
dotnet runutdata.
Logga in på Azure-portalen. Välj Alla resurser och välj den App Configuration Store-instans som du skapade i snabbstarten.
Välj Configuration Explorer och uppdatera värdena för följande nycklar. Kom ihåg att uppdatera sentinel-nyckeln till sist.
Tangent Värde TestApp:Settings:BackgroundColor green TestApp:Settings:FontColor lightGray TestApp:Settings:Message Data från Azure App Configuration – nu med live-uppdateringar! TestApp:Inställningar:Sentinel 2 Uppdatera webbläsarsidan för att visa de nya konfigurationsinställningarna. Du kan behöva uppdatera mer än en gång för att ändringarna ska återspeglas eller ändra förfallotiden för cachen till mindre än 5 minuter.

Rensa resurser
Om du inte vill fortsätta använda resurserna som skapats i den här artikeln tar du bort resurs gruppen som du skapade här för att undvika avgifter.
Viktigt
Att ta bort en resursgrupp kan inte ångras. Resurs gruppen och alla resurser i den tas bort permanent. Var noga så att du inte tar bort fel resursgrupp eller resurser av misstag. Om du har skapat resurserna för den här artikeln i en resurs grupp som innehåller andra resurser som du vill behålla, tar du bort varje resurs separat från dess respektive fönster i stället för att ta bort resurs gruppen.
- Logga in på Azure Portaloch välj resurs grupper.
- I rutan Filtrera efter namn anger du namnet på din resurs grupp.
- I listan resultat väljer du resurs gruppens namn för att se en översikt.
- Välj Ta bort resursgrupp.
- Du blir ombedd att bekräfta borttagningen av resursgruppen. Ange namnet på resurs gruppen som ska bekräftas och välj ta bort.
Efter en liten stund tas resurs gruppen och alla dess resurser bort.
Nästa steg
I den här självstudien har du aktiverat ASP.NET Core för att dynamiskt uppdatera konfigurationsinställningarna från App Configuration. Om du vill lära dig hur du använder en Azure-hanterad identitet för att effektivisera åtkomsten App Configuration kan du fortsätta till nästa självstudie.