Condividi tramite


ambienti ASP.NET Core Blazor

Annotazioni

Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 10 di questo articolo.

Avvertimento

Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere i criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 9 di questo articolo.

Questo articolo spiega come configurare e leggere l'ambiente in un'applicazione.

Quando si esegue un'app in locale, per impostazione predefinita l'ambiente è Development. Quando l'app viene pubblicata, per impostazione predefinita l'ambiente è Production.

È consigliabile usare le convenzioni seguenti:

  • Usare sempre il nome dell'ambiente "Development" per lo sviluppo locale. Questo perché il framework ASP.NET Core prevede esattamente questo nome durante la configurazione dell'app e degli strumenti per le esecuzioni di sviluppo locale di un'app.

  • Per gli ambienti di test, staging e produzione, pubblica e distribuisci sempre l'app. Puoi usare qualsiasi schema di denominazione dell'ambiente che desideri per le app pubblicate, ma usa sempre i nomi dei file di impostazione dell'app rispettando la distinzione tra maiuscole e minuscole del segmento dell'ambiente che corrisponde esattamente al nome dell'ambiente. Per l'ambiente di staging, usare "Staging" (maiuscola "S") come nome dell'ambiente e assegnare al file di impostazioni dell'app un nome che corrisponda (appsettings.Staging.json). Per la produzione, usare "Production" (maiuscola "P") come nome dell'ambiente e assegnare al file di impostazioni dell'app la corrispondenza (appsettings.Production.json).

Impostare l'ambiente

L'ambiente viene impostato usando uno degli approcci seguenti:

Nel client per un Blazor Web App, l'ambiente viene determinato dal server tramite un commento HTML che gli sviluppatori non interagiscono con:

<!--Blazor-WebAssembly:{"environmentName":"Development", ...}-->

Per un'app autonoma Blazor WebAssembly, impostare l'ambiente con la proprietà MSBuild <WasmApplicationEnvironmentName> nel file di progetto dell'app (.csproj). L'esempio seguente imposta l'ambiente Staging :

<WasmApplicationEnvironmentName>Staging</WasmApplicationEnvironmentName>

Gli ambienti predefiniti sono Development per la compilazione e Production per la pubblicazione.

Esistono diversi approcci per l'impostazione dell'ambiente in un'app autonoma Blazor WebAssembly durante le operazioni di compilazione/pubblicazione e un approccio per l'avvio o l'esecuzione di un'app nel client:

  • Impostare il valore della proprietà quando dotnet build o dotnet publish viene eseguito. L'esempio seguente imposta l'ambiente su Staging quando viene pubblicata un'app:

    dotnet publish -p:WasmApplicationEnvironmentName=Staging
    
  • Impostare la proprietà durante la compilazione o la pubblicazione in base alla configurazione dell'app in Visual Studio. I gruppi di proprietà seguenti possono essere usati nel file di progetto dell'app o in qualsiasi file di configurazione di pubblicazione (.pubxml). Aggiungere altri gruppi di proprietà per altre configurazioni di compilazione in uso.

    <PropertyGroup Condition="'$(Configuration)' == 'Debug'">
      <WasmApplicationEnvironmentName>Development</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
    <PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <WasmApplicationEnvironmentName>Production</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
  • L'ambiente può essere impostato in base all'uso di un profilo di pubblicazione. Nell'esempio seguente la prima condizione imposta l'ambiente su Development quando non viene usato alcun profilo di pubblicazione (si applica alle operazioni di compilazione e pubblicazione senza profilo), mentre la seconda condizione copre l'impostazione dell'ambiente su Production quando viene usato un profilo di pubblicazione:

    <PropertyGroup Condition="'$(PublishProfile)' == ''">
      <WasmApplicationEnvironmentName>Development</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
    <PropertyGroup Condition="'$(PublishProfile)' != ''">
      <WasmApplicationEnvironmentName>Production</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
  • Creare un endpoint API Web personalizzato lato server. L'app autonoma Blazor WebAssembly richiede il proprio ambiente dall'API Web all'avvio dell'app o su richiesta mentre è in esecuzione. Il valore deve essere passato a WebAssemblyStartOptions o con withApplicationEnvironment.

    Annotazioni

    In genere, i collegamenti della documentazione alla sorgente di riferimento .NET caricano il ramo predefinito del repository, che rappresenta lo sviluppo corrente per la versione successiva di .NET. Per selezionare un tag per una versione specifica, utilizzare il menu a tendina Seleziona rami o tag. Per ulteriori informazioni, vedere Come selezionare un tag di versione del codice sorgente di ASP.NET Core (dotnet/AspNetCore.Docs #26205).

Nel client per un Blazor Web App, l'ambiente viene determinato dal server tramite un middleware che comunica l'ambiente al browser tramite un'intestazione denominata Blazor-Environment. L'intestazione imposta l'ambiente quando WebAssemblyHost viene creato nel file client Program (WebAssemblyHostBuilder.CreateDefault).

Per un'app autonoma Blazor WebAssembly in esecuzione in locale, il server di sviluppo aggiunge l'intestazione Blazor-Environment con il nome dell'ambiente ottenuto dall'ambiente host. L'ambiente host imposta l'ambiente attraverso la variabile di ambiente ASPNETCORE_ENVIRONMENT stabilita dal file del progetto Properties/launchSettings.json. Il valore predefinito della variabile di ambiente in un progetto creato dal modello di Blazor WebAssembly progetto è Development. Per altre informazioni, vedere la sezione Impostare l'ambiente lato client tramite intestazione .

Nel client di un'app ospitata Blazor WebAssembly , l'ambiente viene determinato dal server tramite un middleware che comunica l'ambiente al browser tramite un'intestazione denominata Blazor-Environment. L'intestazione imposta l'ambiente quando WebAssemblyHost viene creato nel file client Program (WebAssemblyHostBuilder.CreateDefault).

Per un'app autonoma Blazor WebAssembly in esecuzione in locale, il server di sviluppo aggiunge l'intestazione Blazor-Environment con il nome dell'ambiente ottenuto dall'ambiente host. L'ambiente host imposta l'ambiente attraverso la variabile di ambiente ASPNETCORE_ENVIRONMENT stabilita dal file del progetto Properties/launchSettings.json. Il valore predefinito della variabile di ambiente in un progetto creato dal modello di Blazor WebAssembly progetto è Development. Per altre informazioni, vedere la sezione Impostare l'ambiente lato client tramite intestazione .

Per l'esecuzione locale dell'app in fase di sviluppo, l'app utilizza l'ambiente Development per impostazione predefinita. La pubblicazione dell'app imposta per impostazione predefinita l'ambiente su Production.

Per indicazioni generali sulla configurazione dell'app ASP.NET Core, vedere Ambienti di runtime di ASP.NET Core. Per la configurazione delle app lato server con file statici in ambienti diversi dall'ambiente Development durante lo sviluppo e il test (ad esempio, Staging), consultare File statici in ASP.NET Core.

Impostare l'ambiente lato client tramite la configurazione di avvio Blazor.

Nell'esempio seguente Blazor inizia nell'ambiente Staging se il nome host include localhost. In caso contrario, l'ambiente è impostato sul valore predefinito.

Blazor Web App:

<script src="{BLAZOR SCRIPT}" autostart="false"></script>
<script>
  if (window.location.hostname.includes("localhost")) {
    Blazor.start({
      webAssembly: {
        environment: "Staging"
      }
    });
  } else {
    Blazor.start();
  }
</script>

Nell'esempio precedente il {BLAZOR SCRIPT} segnaposto è il percorso dello script e il Blazor nome del file. Per la posizione dello script, consultare la struttura del progetto Blazor.

Annotazioni

Per Blazor Web App che impostano la proprietà webAssembly>environment nella configurazione Blazor.start, è consigliabile associare l'ambiente lato server all'ambiente impostato sulla proprietà environment. In caso contrario, la prerendering sul server opera in un ambiente diverso rispetto al rendering sul client, con effetti arbitrari. Per indicazioni generali sull'impostazione dell'ambiente per un Blazor Web App, vedere ASP.NET Ambienti di runtime di base.

Un Blazor WebAssembly autonomo:

<script src="{BLAZOR SCRIPT}" autostart="false"></script>
<script>
  if (window.location.hostname.includes("localhost")) {
    Blazor.start({
      environment: "Staging"
    });
  } else {
    Blazor.start();
  }
</script>

Nell'esempio precedente il {BLAZOR SCRIPT} segnaposto è il percorso dello script e il Blazor nome del file. Per la posizione dello script, consultare la struttura del progetto Blazor.

L'uso della proprietà esegue l'override environment dell'ambiente impostato dall'intestazioneBlazor-Environment.

L'approccio precedente imposta l'ambiente del client senza modificare il valore dell'intestazione Blazor-Environment, né modifica il log della console del progetto server dell'ambiente di avvio per un Blazor Web App che utilizza il rendering WebAssembly interattivo globale.

Per registrare l'ambiente nella console in un'app autonoma Blazor WebAssembly o nel progetto .Client di un Blazor Web App, inserire il codice C# seguente nel file Program dopo la creazione di WebAssemblyHost e prima della riga che compila ed esegue il progetto (WebAssemblyHostBuilder.CreateDefault):

Console.WriteLine(
    $"Client Hosting Environment: {builder.HostEnvironment.Environment}");

Per altre informazioni sull'avvio di Blazor, vedere Avvio di ASP.NET Core Blazor.

Impostare l'ambiente lato client attraverso l'intestazione

Blazor WebAssembly le app possono impostare l'ambiente con l'intestazione Blazor-Environment . In particolare, l'intestazione della risposta deve essere impostata nel _framework/blazor.boot.json file, ma non c'è alcun problema nell'impostare l'intestazione nelle risposte del file server per altre Blazor richieste di file o per l'intera Blazor distribuzione.

Sebbene il Blazor framework emetta il nome dell'intestazione nel formato kebab case con lettere miste (Blazor-Environment), è possibile utilizzare il formato kebab case tutto minuscolo o tutto maiuscolo (blazor-environment, BLAZOR-ENVIRONMENT).

Per le esecuzioni di sviluppo locale con Blazor il server di sviluppo predefinito, è possibile controllare il valore dell'intestazione Blazor-Environment impostando il valore della variabile d'ambiente ASPNETCORE_ENVIRONMENT nel file del progetto Properties/launchSettings.json. Quando si esegue localmente con il server di sviluppo, l'ordine di precedenza per determinare l'ambiente dell'app è Blazor.start configuration (environment key)>Blazor-Environment response header (blazor.boot.json file) >ASPNETCORE_ENVIRONMENT environment variable (launchSettings.json). Non è possibile usare l'approccio della ASPNETCORE_ENVIRONMENT variabile di ambiente (launchSettings.json) per un'app distribuita Blazor WebAssembly . La tecnica funziona solo con il server di sviluppo nelle esecuzioni locali dell'app.

IIS

Nell'esempio seguente per IIS, l'intestazione personalizzata (Blazor-Environment) viene aggiunta al file pubblicato web.config . Il web.config file si trova nella bin/Release/{TARGET FRAMEWORK}/publish cartella, dove il {TARGET FRAMEWORK} segnaposto è il framework di destinazione:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    ...
    <httpProtocol>
      <customHeaders>
        <add name="Blazor-Environment" value="Staging" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

Annotazioni

Per usare un file personalizzato web.config per IIS che non viene sovrascritto quando l'app viene pubblicata nella publish cartella, vedere Ospitare e distribuire ASP.NET Core Blazor WebAssembly con IIS.

Nginx

Per i server Nginx, usare la add_header direttiva da ngx_http_headers_module:

http {
    server {
        ...
        location / {
            ...
            add_header Blazor-Environment "Staging";
        }
    }
}

Per altre informazioni, vedere le risorse seguenti:

Apache

Per i server Apache, usare la Header direttiva del mod_headers modulo:

<VirtualHost *:80>
    ...
    Header set Blazor-Environment "Staging"
    ...
</VirtualHost>

Per altre informazioni, vedere le risorse seguenti:

Impostare l'ambiente per il servizio app di Azure

Per un'app autonomaBlazor WebAssembly, è possibile impostare l'ambiente manualmente tramite la configurazione di avvio o l'intestazioneBlazor-Environment.

Per un'app lato server, configura l'ambiente tramite un'impostazione dell'applicazione in Azure:

  1. Verificare che la combinazione di maiuscole e minuscole dei segmenti di ambiente nei nomi dei file delle impostazioni dell'app corrisponda esattamente al nome dell'ambiente. Ad esempio, il nome file delle impostazioni dell'app corrispondente per l'ambiente Staging è appsettings.Staging.json. Se il nome del file è appsettings.staging.json (minuscolo "s"), il file non si trova e le impostazioni nel file non vengono usate nell'ambiente Staging .

  2. Per la distribuzione di Visual Studio, verificare che l'app sia distribuita nello slot di distribuzione corretto. Per un'app denominata BlazorAzureAppSample, l'app viene distribuita nello Staging slot di distribuzione.

  3. Nel portale di Azure, per lo slot di distribuzione dell'ambiente, imposta l'ambiente con l'impostazione applicazione ASPNETCORE_ENVIRONMENT. Per un'app denominata BlazorAzureAppSample, lo slot del servizio app di staging è denominato BlazorAzureAppSample/Staging. Per la Staging configurazione dello slot, creare una impostazione dell'app per ASPNETCORE_ENVIRONMENT con il valore Staging. L'impostazione dello slot di distribuzione è abilitata.

Quando richiesto in un browser, l'app BlazorAzureAppSample/Staging viene caricata nell'ambiente Staging in https://blazorazureappsample-staging.azurewebsites.net.

Quando l'app viene caricata nel browser, la raccolta di intestazioni di risposta per blazor.boot.json indica che il valore dell'intestazione Blazor-Environment è Staging.

Le impostazioni dell'app dal appsettings.{ENVIRONMENT}.json file vengono caricate dall'app, dove il {ENVIRONMENT} segnaposto è l'ambiente dell'app. Nell'esempio precedente le impostazioni del appsettings.Staging.json file vengono caricate.

Leggere l'ambiente nell'app Blazor WebAssembly

Ottenere l'ambiente dell'app in un componente inserendo IWebAssemblyHostEnvironment e leggendo la proprietà Environment.

ReadEnvironment.razor:

@page "/read-environment"
@using Microsoft.AspNetCore.Components.WebAssembly.Hosting
@inject IWebAssemblyHostEnvironment Env

<h1>Environment example</h1>

<p>Environment: @Env.Environment</p>

Leggere il lato client dell'ambiente in un Blazor Web App

Supponendo che il prerendering non sia disabilitato per un componente o per l'app, un componente del progetto .Client viene prerenderizzato sul server. Poiché il server non dispone di un servizio registrato IWebAssemblyHostEnvironment, non è possibile iniettare il servizio e utilizzare i metodi e le proprietà dell'estensione dell'ambiente host relativi all'implementazione del servizio durante il prerendering del server. L'inserimento del servizio in un componente Interactive WebAssembly o Interactive Auto genera l'errore di runtime seguente:

There is no registered service of type 'Microsoft.AspNetCore.Components.WebAssembly.Hosting.IWebAssemblyHostEnvironment'.

Per risolvere questo problema, creare un'implementazione del servizio personalizzata per IWebAssemblyHostEnvironment nel server. Per altre informazioni e un'implementazione di esempio, vedere la sezione Implementazione del servizio personalizzato nel server dell'articolo Prerendering , disponibile più avanti nella Blazor documentazione.

Leggere l'ambiente lato client durante l'avvio

Durante l'avvio, WebAssemblyHostBuilder espone IWebAssemblyHostEnvironment tramite la proprietà HostEnvironment, che abilita la logica specifica dell'ambiente nel codice del costruttore host.

Nel file Program:

if (builder.HostEnvironment.Environment == "Custom")
{
    ...
};

I seguenti metodi di estensione, forniti tramite WebAssemblyHostEnvironmentExtensions, consentono di controllare l'ambiente corrente per Development, Production, Staging e nomi di ambiente personalizzati.

Nel file Program:

if (builder.HostEnvironment.IsStaging())
{
    ...
};

if (builder.HostEnvironment.IsEnvironment("Custom"))
{
    ...
};

La IWebAssemblyHostEnvironment.BaseAddress proprietà può essere usata durante l'avvio quando il NavigationManager servizio non è disponibile.

Risorse aggiuntive