Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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.
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:
- appsettings.json file, se disponibile
- appsettings.{ENVIRONMENT_NAME}.json file, se presente
- File dei segreti utente su disco, se presente
- Variabili di ambiente
- 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.