configurazione di ASP.NET Core Blazor
Nota
Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 8 di questo articolo.
Avviso
Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere Criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 8 di questo articolo.
Importante
Queste informazioni si riferiscono a un prodotto non definitive che può essere modificato in modo sostanziale prima che venga rilasciato commercialmente. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Per la versione corrente, vedere la versione .NET 8 di questo articolo.
Questo articolo illustra come configurare Blazor le app, incluse le impostazioni dell'app, l'autenticazione e la configurazione della registrazione.
Queste indicazioni si applicano alla configurazione del progetto lato client in un'app Blazor Web App autonoma Blazor WebAssembly o .
Comportamento predefinito in Blazor Web Apps:
- Per la configurazione lato server:
- Per indicazioni, vedere Configurazione in ASP.NET Core .
- Viene caricata solo la configurazione nei file di impostazioni dell'app radice del progetto.
- La parte restante di questo articolo si applica solo alla configurazione lato client nel
.Client
progetto.
- Per la configurazione lato client (
.Client
progetto), la configurazione viene caricata dai file di impostazioni dell'app seguenti:wwwroot/appsettings.json
.wwwroot/appsettings.{ENVIRONMENT}.json
, dove il{ENVIRONMENT}
segnaposto è l'ambiente di runtime dell'app.
Nelle app autonome Blazor WebAssembly , la configurazione viene caricata dai file di impostazioni dell'app seguenti:
wwwroot/appsettings.json
.wwwroot/appsettings.{ENVIRONMENT}.json
, dove il{ENVIRONMENT}
segnaposto è l'ambiente di runtime dell'app.
Queste indicazioni si applicano al Client
progetto di una soluzione ospitata Blazor WebAssembly o di un'app Blazor WebAssembly .
Per la configurazione di app core sul lato server ASP.NET nel Server
progetto di una soluzione ospitata Blazor WebAssembly , vedere Configurazione in ASP.NET Core.
Nel client la configurazione viene caricata dai file di impostazioni dell'app seguenti:
wwwroot/appsettings.json
.wwwroot/appsettings.{ENVIRONMENT}.json
, dove il{ENVIRONMENT}
segnaposto è l'ambiente di runtime dell'app.
Nota
La configurazione di registrazione inserita in un file di impostazioni dell'app in wwwroot
non viene caricata per impostazione predefinita. Per altre informazioni, vedere la sezione Configurazione della registrazione più avanti in questo articolo.
In alcuni scenari, ad esempio con i servizi di Azure, è importante usare un segmento di nome file di ambiente che corrisponda esattamente al nome dell'ambiente. Ad esempio, usare il nome appsettings.Staging.json
del file con la maiuscola "S" per l'ambiente Staging
. Per le convenzioni consigliate, vedere le osservazioni di apertura degli ambienti ASP.NET CoreBlazor.
Altri provider di configurazione registrati dall'app possono anche fornire la configurazione, ma non tutti i provider o le funzionalità del provider sono appropriati:
- Provider di configurazione di Azure Key Vault: il provider non è supportato per scenari gestiti identity e ID applicazione (ID client) con segreti client. L'ID applicazione con un segreto client non è consigliato per qualsiasi app core ASP.NET, in particolare le app sul lato client perché il segreto client non può essere protetto sul lato client per accedere al servizio Azure Key Vault.
- app Azure provider di configurazione: il provider non è appropriato per un'app lato client perché l'app non viene eseguita in un server in Azure.
Per altre informazioni sui provider di configurazione, vedere Configurazione in ASP.NET Core.
Avviso
I file di configurazione e di impostazioni nella radice Web (wwwroot
cartella) sono visibili agli utenti del client e gli utenti possono manomettere i dati. Non archiviare segreti, credenziali o altri dati sensibili in qualsiasi file radice Web.
Configurazione delle impostazioni dell'app
La configurazione nei file delle impostazioni dell'app viene caricata per impostazione predefinita. Nell'esempio seguente un valore di configurazione dell'interfaccia utente viene archiviato in un file di impostazioni dell'app e caricato automaticamente dal Blazor framework. Il valore viene letto da un componente.
wwwroot/appsettings.json
:
{
"h1FontSize": "50px"
}
Inserire un'istanza IConfiguration in un componente per accedere ai dati di configurazione.
ConfigExample.razor
:
@page "/config-example"
@inject IConfiguration Configuration
<PageTitle>Configuration</PageTitle>
<h1 style="font-size:@Configuration["h1FontSize"]">
Configuration example (50px)
</h1>
@page "/config-example"
@inject IConfiguration Configuration
<PageTitle>Configuration</PageTitle>
<h1 style="font-size:@Configuration["h1FontSize"]">
Configuration example (50px)
</h1>
@page "/config-example"
@inject IConfiguration Configuration
<h1 style="font-size:@Configuration["h1FontSize"]">
Configuration example
</h1>
@page "/config-example"
@inject IConfiguration Configuration
<h1 style="font-size:@Configuration["h1FontSize"]">
Configuration example
</h1>
@page "/config-example"
@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration
<h1 style="font-size:@Configuration["h1FontSize"]">
Configuration example
</h1>
@page "/config-example"
@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration
<h1 style="font-size:@Configuration["h1FontSize"]">
Configuration example
</h1>
Le restrizioni di sicurezza client impediscono l'accesso diretto ai file tramite codice utente, inclusi i file di impostazioni per la configurazione dell'app. Per leggere i file di configurazione oltre alla appsettings.json
wwwroot
/appsettings.{ENVIRONMENT}.json
cartella nella configurazione, usare un oggetto .HttpClient
Avviso
I file di configurazione e di impostazioni nella radice Web (wwwroot
cartella) sono visibili agli utenti del client e gli utenti possono manomettere i dati. Non archiviare segreti, credenziali o altri dati sensibili in qualsiasi file radice Web.
L'esempio seguente legge un file di configurazione (cars.json
) nella configurazione dell'app.
wwwroot/cars.json
:
{
"size": "tiny"
}
Aggiungere lo spazio dei nomi per Microsoft.Extensions.Configuration al Program
file:
using Microsoft.Extensions.Configuration;
Modificare la registrazione del servizio esistente HttpClient per usare il client per leggere il file:
var http = new HttpClient()
{
BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)
};
builder.Services.AddScoped(sp => http);
using var response = await http.GetAsync("cars.json");
using var stream = await response.Content.ReadAsStreamAsync();
builder.Configuration.AddJsonStream(stream);
L'esempio precedente imposta l'indirizzo di base con builder.HostEnvironment.BaseAddress
(IWebAssemblyHostEnvironment.BaseAddress), che ottiene l'indirizzo di base per l'app ed è in genere derivato dal <base>
valore del href
tag nella pagina host.
Origine configurazione memoria
Nell'esempio Program
seguente viene usato un oggetto MemoryConfigurationSource nel file per fornire una configurazione aggiuntiva.
Aggiungere lo spazio dei nomi per Microsoft.Extensions.Configuration.Memory al Program
file:
using Microsoft.Extensions.Configuration.Memory;
Nel file Program
:
var vehicleData = new Dictionary<string, string?>()
{
{ "color", "blue" },
{ "type", "car" },
{ "wheels:count", "3" },
{ "wheels:brand", "Blazin" },
{ "wheels:brand:type", "rally" },
{ "wheels:year", "2008" },
};
var memoryConfig = new MemoryConfigurationSource { InitialData = vehicleData };
builder.Configuration.Add(memoryConfig);
Inserire un'istanza IConfiguration in un componente per accedere ai dati di configurazione.
MemoryConfig.razor
:
@page "/memory-config"
@inject IConfiguration Configuration
<PageTitle>Memory Configuration</PageTitle>
<h1>Memory Configuration Example</h1>
<h2>General specifications</h2>
<ul>
<li>Color: @Configuration["color"]</li>
<li>Type: @Configuration["type"]</li>
</ul>
<h2>Wheels</h2>
<ul>
<li>Count: @Configuration["wheels:count"]</li>
<li>Brand: @Configuration["wheels:brand"]</li>
<li>Type: @Configuration["wheels:brand:type"]</li>
<li>Year: @Configuration["wheels:year"]</li>
</ul>
@page "/memory-config"
@inject IConfiguration Configuration
<PageTitle>Memory Configuration</PageTitle>
<h1>Memory Configuration Example</h1>
<h2>General specifications</h2>
<ul>
<li>Color: @Configuration["color"]</li>
<li>Type: @Configuration["type"]</li>
</ul>
<h2>Wheels</h2>
<ul>
<li>Count: @Configuration["wheels:count"]</li>
<li>Brand: @Configuration["wheels:brand"]</li>
<li>Type: @Configuration["wheels:brand:type"]</li>
<li>Year: @Configuration["wheels:year"]</li>
</ul>
@page "/memory-config"
@inject IConfiguration Configuration
<h1>Memory configuration example</h1>
<h2>General specifications</h2>
<ul>
<li>Color: @Configuration["color"]</li>
<li>Type: @Configuration["type"]</li>
</ul>
<h2>Wheels</h2>
<ul>
<li>Count: @Configuration["wheels:count"]</li>
<li>Brand: @Configuration["wheels:brand"]</li>
<li>Type: @Configuration["wheels:brand:type"]</li>
<li>Year: @Configuration["wheels:year"]</li>
</ul>
@page "/memory-config"
@inject IConfiguration Configuration
<h1>Memory configuration example</h1>
<h2>General specifications</h2>
<ul>
<li>Color: @Configuration["color"]</li>
<li>Type: @Configuration["type"]</li>
</ul>
<h2>Wheels</h2>
<ul>
<li>Count: @Configuration["wheels:count"]</li>
<li>Brand: @Configuration["wheels:brand"]</li>
<li>Type: @Configuration["wheels:brand:type"]</li>
<li>Year: @Configuration["wheels:year"]</li>
</ul>
@page "/memory-config"
@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration
<h1>Memory configuration example</h1>
<h2>General specifications</h2>
<ul>
<li>Color: @Configuration["color"]</li>
<li>Type: @Configuration["type"]</li>
</ul>
<h2>Wheels</h2>
<ul>
<li>Count: @Configuration["wheels:count"]</li>
<li>Brand: @Configuration["wheels:brand"]</li>
<li>Type: @Configuration["wheels:brand:type"]</li>
<li>Year: @Configuration["wheels:year"]</li>
</ul>
@page "/memory-config"
@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration
<h1>Memory configuration example</h1>
<h2>General specifications</h2>
<ul>
<li>Color: @Configuration["color"]</li>
<li>Type: @Configuration["type"]</li>
</ul>
<h2>Wheels</h2>
<ul>
<li>Count: @Configuration["wheels:count"]</li>
<li>Brand: @Configuration["wheels:brand"]</li>
<li>Type: @Configuration["wheels:brand:type"]</li>
<li>Year: @Configuration["wheels:year"]</li>
</ul>
Ottenere una sezione della configurazione nel codice C# con IConfiguration.GetSection. Nell'esempio seguente viene ottenuta la wheels
sezione relativa alla configurazione nell'esempio precedente:
@code {
protected override void OnInitialized()
{
var wheelsSection = Configuration.GetSection("wheels");
...
}
}
Configurazione dell'autenticazione
Specificare la configurazione dell'autenticazione pubblica in un file di impostazioni dell'app.
wwwroot/appsettings.json
:
{
"Local": {
"Authority": "{AUTHORITY}",
"ClientId": "{CLIENT ID}"
}
}
Caricare la configurazione per un Identity provider con ConfigurationBinder.Bind nel Program
file . L'esempio seguente carica la configurazione per un provider OIDC:
builder.Services.AddOidcAuthentication(options =>
builder.Configuration.Bind("Local", options.ProviderOptions));
Avviso
I file di configurazione e di impostazioni nella radice Web (wwwroot
cartella) sono visibili agli utenti del client e gli utenti possono manomettere i dati. Non archiviare segreti, credenziali o altri dati sensibili in qualsiasi file radice Web.
Configurazione della registrazione
Questa sezione si applica alle app che configurano la registrazione tramite un file di impostazioni dell'app nella wwwroot
cartella .
Aggiungere il Microsoft.Extensions.Logging.Configuration
pacchetto all'app.
Nota
Per indicazioni sull'aggiunta di pacchetti alle app .NET, vedere gli articoli sotto Installare e gestire pacchetti in Flusso di lavoro dell'utilizzo di pacchetti (documentazione di NuGet). Confermare le versioni corrette del pacchetto all'indirizzo NuGet.org.
Nel file delle impostazioni dell'app specificare la configurazione della registrazione. La configurazione di registrazione viene caricata nel Program
file.
wwwroot/appsettings.json
:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
Nel file Program
:
builder.Logging.AddConfiguration(
builder.Configuration.GetSection("Logging"));
Configurazione del generatore di host
Leggere la configurazione del Program
generatore host da WebAssemblyHostBuilder.Configuration nel file:
var hostname = builder.Configuration["HostName"];
Configurazione memorizzata nella cache
I file di configurazione vengono memorizzati nella cache per l'uso offline. Con le applicazioni Web progressive (PWA) è possibile aggiornare solo i file di configurazione durante la creazione di una nuova distribuzione. La modifica dei file di configurazione tra distribuzioni non ha alcun effetto perché:
- Gli utenti hanno memorizzato nella cache le versioni dei file che continuano a usare.
- I file e
service-worker-assets.js
i file diservice-worker.js
PWA devono essere ricompilati durante la compilazione, che segnalano all'app nella prossima visita online dell'utente che l'app è stata ridistribuita.
Per altre informazioni su come vengono gestiti gli aggiornamenti in background da PWA, vedere ASP.NET Core Blazor Progressive Web Application (PWA).
Configurazione delle opzioni
La configurazione delle opzioni richiede l'aggiunta di un riferimento al Microsoft.Extensions.Options.ConfigurationExtensions
pacchetto NuGet.
Nota
Per indicazioni sull'aggiunta di pacchetti alle app .NET, vedere gli articoli sotto Installare e gestire pacchetti in Flusso di lavoro dell'utilizzo di pacchetti (documentazione di NuGet). Confermare le versioni corrette del pacchetto all'indirizzo NuGet.org.
Esempio:
builder.Services.Configure<MyOptions>(
builder.Configuration.GetSection("MyOptions"));
Non tutte le funzionalità ASP.NET Core Options sono supportate nei Razor componenti. Ad esempio, IOptionsSnapshot<TOptions> e IOptionsMonitor<TOptions> la configurazione è supportata, ma la ricompilazione dei valori delle opzioni per queste interfacce non è supportata al di fuori del ricaricamento dell'app richiedendo l'app in una nuova scheda del browser o selezionando il pulsante ricarica del browser. La semplice chiamata StateHasChanged
non aggiorna i valori delle opzioni di snapshot o monitorati quando cambia la configurazione sottostante.