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.

  1. I Azure Portal väljer du Configuration Explorer > Create > Key-value.
  2. För Nyckel anger du TestApp:Inställningar:Sentinel. För Värde anger du 1. Lämna Etikett och Innehållstyp tomma.
  3. 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

  1. Lägg till en referens till Microsoft.Azure.AppConfiguration.AspNetCore NuGet-paketet genom att köra följande kommando:

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    
  2. Öppna Program.cs och uppdatera metoden CreateWebHostBuilder för att lägga till metoden config.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 ConfigureRefresh registrerar du nycklar i ditt App Configuration som du vill övervaka för ändringar. Parametern refreshAll till metoden anger att alla Register konfigurationsvä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 att SetCacheExpiration App 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.

  3. Lägg till Inställningar.cs-fil i katalogen Controllers som definierar och implementerar en ny Settings klass. 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; }
        }
    }
    
  4. Öppna Startup.cs och uppdatera ConfigureServices metoden . Anropa Configure<Settings> för att binda konfigurationsdata till klassen Settings . Anropa AddAzureAppConfiguration fö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();
    }
    
  5. Uppdatera metoden Configure och lägg till ett anrop till UseAzureAppConfiguration . 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 ConfigureRefresh i 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

  1. Öppna HomeController.cs i katalogen Controllers och lägg till en referens till Microsoft.Extensions.Options paketet.

    using Microsoft.Extensions.Options;
    
  2. Uppdatera klassen HomeController för att ta emot via Settings beroendeinjektion 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.

  3. Ö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

  1. Skapa appen med hjälp av .NET Core CLI kör du följande kommando i kommandogränssnittet:

        dotnet build
    
  2. När bygget är klart kör du följande kommando för att köra webbappen lokalt:

        dotnet run
    
  3. Öppna ett webbläsarfönster och gå till den URL som visas i dotnet run utdata.

    Starta snabbstartsappen lokalt

  4. Logga in på Azure-portalen. Välj Alla resurser och välj den App Configuration Store-instans som du skapade i snabbstarten.

  5. 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
  6. 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.

    Starta den uppdaterade snabbstartsappen lokalt

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.

  1. Logga in på Azure Portaloch välj resurs grupper.
  2. I rutan Filtrera efter namn anger du namnet på din resurs grupp.
  3. I listan resultat väljer du resurs gruppens namn för att se en översikt.
  4. Välj Ta bort resursgrupp.
  5. 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.