Condividi tramite


Configurazione app

Suggerimento

Questo contenuto è un estratto dell'eBook, Blazor per gli sviluppatori di Web Forms ASP.NET per Azure, disponibile in .NET Docs o come PDF scaricabile gratuitamente che può essere letto offline.

Anteprima della copertina dell'eBook Blazor-for-ASP-NET-Web-Forms-Developers.

Il modo principale per caricare la configurazione dell'app in Web Form è costituito dalle voci nel file web.config , nel server o in un file di configurazione correlato a cui fa riferimento web.config. È possibile usare l'oggetto statico ConfigurationManager per interagire con le impostazioni dell'app, le stringhe di connessione del repository dati e altri provider di configurazione estesi aggiunti all'app. È tipico visualizzare le interazioni con la configurazione dell'app, come illustrato nel codice seguente:

var configurationValue = ConfigurationManager.AppSettings["ConfigurationSettingName"];
var connectionString = ConfigurationManager.ConnectionStrings["MyDatabaseConnectionName"].ConnectionString;

Con ASP.NET Core e sul lato Blazorserver , il file web.config può essere presente se l'app è ospitata in un server WINDOWS IIS. Tuttavia, non esiste alcuna ConfigurationManager interazione con questa configurazione ed è possibile ricevere una configurazione dell'app più strutturata da altre origini. Si esaminerà ora come viene raccolta la configurazione e come è comunque possibile accedere alle informazioni di configurazione da un file diweb.config .

Origini di configurazione

ASP.NET Core riconosce che esistono molte origini di configurazione che è possibile usare per l'app. Il framework tenta di offrire il meglio di queste funzionalità per impostazione predefinita. La configurazione viene letta e aggregata da ASP.NET Core a partire da queste varie origini. I valori caricati successivamente per la stessa chiave di configurazione hanno la precedenza sui valori precedenti.

ASP.NET Core è stato progettato per essere compatibile con il cloud e semplificare la configurazione delle app sia per gli operatori che per gli sviluppatori. ASP.NET Core è compatibile con l'ambiente e sa se è in esecuzione nell'ambiente Production o Development . L'indicatore di ambiente viene impostato nella variabile di ambiente di ASPNETCORE_ENVIRONMENT sistema. Se non è configurato alcun valore, per impostazione predefinita l'app viene eseguita nell'ambiente Production .

L'app può attivare e aggiungere configurazioni da diverse fonti in base al nome dell'ambiente. Per impostazione predefinita, la configurazione viene caricata dalle risorse seguenti nell'ordine elencato:

  1. appsettings.json file, se disponibile
  2. appsettings.{ENVIRONMENT_NAME}.json file, se presente
  3. File dei segreti utente su disco, se presente
  4. Variabili di ambiente
  5. Argomenti della riga di comando

appsettings.json formato e accesso

Il fileappsettings.json può essere gerarchico con valori strutturati come il codice JSON seguente:

{
  "section0": {
    "key0": "value",
    "key1": "value"
  },
  "section1": {
    "key0": "value",
    "key1": "value"
  }
}

Quando si presenta il codice JSON precedente, il sistema di configurazione appiattisce i valori subordinati e si riferisce ai loro percorsi gerarchici completamente qualificati. Il carattere due punti (:) separa le proprietà della gerarchia. Ad esempio, la chiave di configurazione section1:key0 accede al valore section1 del letterale dell'oggetto key0.

Segreti utente

I segreti utente sono:

  • Valori di configurazione archiviati in un file JSON nella workstation dello sviluppatore, all'esterno della cartella di sviluppo dell'app.
  • Caricato solo durante l'esecuzione nell'ambiente Development .
  • Associato a un'app specifica.
  • Gestito con il comando della riga di comando di .NET user-secrets.

Configurare l'app per l'archiviazione dei segreti eseguendo il user-secrets comando :

dotnet user-secrets init

Il comando precedente aggiunge un UserSecretsId elemento al file di progetto. L'elemento contiene un GUID, che viene usato per associare segreti all'app. È quindi possibile definire un segreto con il set comando . Per esempio:

dotnet user-secrets set "Parent:ApiKey" "12345"

Il comando precedente rende disponibile la Parent:ApiKey chiave di configurazione nella workstation di uno sviluppatore con il valore 12345.

Per altre informazioni sulla creazione, l'archiviazione e la gestione dei segreti utente, vedere il documento Safe storage of app secrets in development in ASP.NET Core (Archiviazione sicura dei segreti delle app in fase di sviluppo in ASP.NET Core ).

Variabili di ambiente

Il set successivo di valori caricati nella configurazione dell'app è rappresentato dalle variabili di ambiente del sistema. Tutte le impostazioni delle variabili di ambiente del sistema sono ora accessibili tramite l'API di configurazione. I valori gerarchici vengono appiattiti e separati da due punti quando vengono letti all'interno della tua app. Tuttavia, alcuni sistemi operativi non consentono l'uso del carattere due punti nei nomi delle variabili di ambiente. ASP.NET Core risolve questa limitazione convertendo i valori con caratteri di sottolineatura doppia (__) in due punti quando vengono acceduti. Il valore Parent:ApiKey della sezione dei segreti utente precedente può essere sovrascritto con la variabile di ambiente Parent__ApiKey.

Argomenti della riga di comando

La configurazione può essere fornita anche come argomenti della riga di comando all'avvio dell'app. Usare la notazione trattino doppio (--) o barra (/) per indicare il nome del valore di configurazione da impostare e il valore da configurare. La sintassi è simile ai comandi seguenti:

dotnet run CommandLineKey1=value1 --CommandLineKey2=value2 /CommandLineKey3=value3
dotnet run --CommandLineKey1 value1 /CommandLineKey2 value2
dotnet run Parent:ApiKey=67890

Il ritorno di web.config

Se l'app è stata distribuita in Windows in IIS, il file web.config configura comunque IIS per gestire l'app. Per impostazione predefinita, IIS aggiunge un riferimento al ASP.NET Core Module (ANCM). ANCM è un modulo IIS nativo che ospita l'app al posto del server Web Kestrel. Questa sezioneweb.config è simile al markup XML seguente:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\MyApp.exe"
                  stdoutLogEnabled="false"
                  stdoutLogFile=".\logs\stdout"
                  hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

La configurazione specifica dell'app può essere definita annidando un environmentVariables elemento nell'elemento aspNetCore . I valori definiti in questa sezione vengono presentati all'app ASP.NET Core come variabili di ambiente. Le variabili di ambiente caricano in modo appropriato durante il segmento di avvio dell'app.

<aspNetCore processPath="dotnet"
      arguments=".\MyApp.dll"
      stdoutLogEnabled="false"
      stdoutLogFile=".\logs\stdout"
      hostingModel="inprocess">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
    <environmentVariable name="Parent:ApiKey" value="67890" />
  </environmentVariables>
</aspNetCore>

Leggere la configurazione nell'app

ASP.NET Core fornisce la configurazione dell'app tramite l'interfaccia IConfiguration . Questa interfaccia di configurazione deve essere richiesta dai Blazor componenti, dalle Blazor pagine e da qualsiasi altra classe gestita da ASP.NET Core che richiede l'accesso alla configurazione. Il framework ASP.NET Core popola automaticamente questa interfaccia con la configurazione risolta configurata in precedenza. Nel markup Razor di un componente o pagina, puoi inserire l'oggetto Blazor con una direttiva IConfiguration all'inizio del file @inject come segue:

@inject IConfiguration Configuration

Questa istruzione precedente rende l'oggetto IConfiguration disponibile come Configuration variabile nel resto del modello Razor.

È possibile leggere le singole impostazioni di configurazione specificando la gerarchia delle impostazioni di configurazione cercata come parametro dell'indicizzatore:

var mySetting = Configuration["section1:key0"];

È possibile recuperare intere sezioni di configurazione usando il GetSection metodo per recuperare una raccolta di chiavi in un percorso specifico con una sintassi simile a GetSection("section1") quella per recuperare la configurazione per section1 dall'esempio precedente.

Configurazione fortemente tipizzata

Con Web Forms, è stato possibile creare un tipo di configurazione fortemente tipizzato che ereditava dal tipo ConfigurationSection e dai tipi associati. Il ConfigurationSection ti permetteva di configurare alcune regole aziendali e i processi per quei valori di configurazione.

In ASP.NET Core è possibile specificare una gerarchia di classi che riceverà i valori di configurazione. Queste classi:

  • Non è necessario ereditare da una classe padre.
  • Deve includere public proprietà che corrispondono alle proprietà e ai riferimenti di tipo per la struttura di configurazione che si desidera acquisire.

Per l'esempio diappsettings.json precedente, è possibile definire le classi seguenti per acquisire i valori:

public class MyConfig
{
    public MyConfigSection section0 { get; set;}

    public MyConfigSection section1 { get; set;}
}

public class MyConfigSection
{
    public string key0 { get; set; }

    public string key1 { get; set; }
}

Questa gerarchia di classi può essere popolata aggiungendo la riga seguente al Startup.ConfigureServices metodo o alla posizione appropriata in Program.cs usando la builder.Services proprietà anziché services:

services.Configure<MyConfig>(Configuration);

Nella parte rimanente dell'app, è possibile aggiungere un parametro di input alle classi o una @inject direttiva nei modelli Razor di tipo IOptions<MyConfig> per ricevere le impostazioni di configurazione fortemente tipizzate. La IOptions<MyConfig>.Value proprietà restituirà il MyConfig valore popolato dalle impostazioni di configurazione.

@inject IOptions<MyConfig> options
@code {
    var MyConfiguration = options.Value;
    var theSetting = MyConfiguration.section1.key0;
}

Altre informazioni sulla funzionalità delle opzioni sono disponibili nel modello di opzioni nel documento su ASP.NET Core.