Dela via


ASP.NET Core-miljöer Blazor

Anmärkning

Det här är inte den senaste versionen av den här artikeln. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Varning

Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i .NET och .NET Core Support Policy. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Viktigt!

Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.

För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Den här artikeln beskriver hur du konfigurerar och läser miljön i en Blazor app.

När du kör en app lokalt är miljön som standard Development. När appen publiceras är miljön som standard Production.

Vi rekommenderar följande konventioner:

  • Använd alltid miljönamnet "Development" för lokal utveckling. Det beror på att ASP.NET Core Framework förväntar sig exakt det namnet när du konfigurerar appen och verktygen för lokala utvecklingskörningar av en app.

  • För testnings-, mellanlagrings- och produktionsmiljöer ska du alltid publicera och distribuera appen. Du kan använda valfritt miljönamnschema som du vill för publicerade appar, men alltid använda filnamn för appinställningar med hölje för miljösegmentet som exakt matchar miljönamnet. För mellanlagring använder du "Staging" (versalt "S") som miljönamn och namnger den appinställningsfil som ska matcha (appsettings.Staging.json). För produktion använder du "Production" (versalt "P") som miljönamn och namnger appens inställningsfil som ska matcha (appsettings.Production.json).

Ange miljön

Miljön anges med någon av följande metoder:

På klienten för en Blazor Web Appbestäms miljön från servern via en HTML-kommentar som utvecklare inte interagerar med:

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

För en fristående Blazor WebAssembly app anger du miljön med <WasmApplicationEnvironmentName> egenskapen i appens projektfil (.csproj). I följande exempel anges Staging miljön:

<WasmApplicationEnvironmentName>Staging</WasmApplicationEnvironmentName>

Standardmiljöerna är Development för build och Production för publicering.

På klienten för en Blazor Web Appbestäms miljön från servern via ett mellanprogram som kommunicerar miljön till webbläsaren via ett huvud med namnet Blazor-Environment. Header konfigurerar miljön när WebAssemblyHost skapas i klientsidefilen Program (WebAssemblyHostBuilder.CreateDefault).

För en fristående Blazor WebAssembly app som körs lokalt lägger utvecklingsservern till Blazor-Environment header med miljönamnet som hämtas från värdmiljön. Värdmiljön anger miljön från ASPNETCORE_ENVIRONMENT miljövariabeln som upprättats av projektets Properties/launchSettings.json fil. Standardvärdet för miljövariabeln i ett projekt som skapats Blazor WebAssembly från projektmallen är Development. Mer information finns i avsnittet Ange miljön på klientsidan via sidhuvud .

På klienten av en hostad Blazor WebAssembly app bestäms miljön från servern via ett mellanprogram som kommunicerar miljön till webbläsaren via en header med namnet Blazor-Environment. Header konfigurerar miljön när WebAssemblyHost skapas i klientsidefilen Program (WebAssemblyHostBuilder.CreateDefault).

För en fristående Blazor WebAssembly app som körs lokalt lägger utvecklingsservern till Blazor-Environment header med miljönamnet som hämtas från värdmiljön. Värdmiljön anger miljön från ASPNETCORE_ENVIRONMENT miljövariabeln som upprättats av projektets Properties/launchSettings.json fil. Standardvärdet för miljövariabeln i ett projekt som skapats Blazor WebAssembly från projektmallen är Development. Mer information finns i avsnittet Ange miljön på klientsidan via sidhuvud .

För appar som körs lokalt under utveckling, använder appen standardmiljön Development. Standardmiljön sätts till Production när appen publiceras.

Allmän vägledning om ASP.NET Core-appkonfiguration finns i ASP.NET Core-körningsmiljöer. För appkonfiguration på serversidan med statiska filer i andra miljöer än Development miljön under utveckling och testning (till exempel Staging), se Statiska filer i ASP.NET Core.

Ange miljön på klientsidan via Blazor startkonfiguration

Följande exempel börjar Blazor i Staging miljön om värdnamnet innehåller localhost. Annars är miljön inställd på standardvärdet.

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>

I det föregående exemplet representerar platshållaren {BLAZOR SCRIPT} skriptsökvägen och filnamnet för Blazor. Platsen för skriptet finns i ASP.NET Core Blazor projektstruktur.

Anmärkning

För Blazor Web Apps som anger webAssembly>environmentegenskapen i Blazor.startkonfigurationen är det klokt att matcha servermiljön med den miljö som angetts för environment egenskapen. Annars fungerar prerendering på servern i en annan miljö än rendering på klienten, vilket resulterar i godtyckliga effekter. Allmän vägledning om hur du anger miljön för en Blazor Web Appfinns i ASP.NET Core Runtime-miljöer.

Fristående Blazor WebAssembly:

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

I det föregående exemplet representerar platshållaren {BLAZOR SCRIPT} skriptsökvägen och filnamnet för Blazor. Platsen för skriptet finns i ASP.NET Core Blazor projektstruktur.

environment Om du använder egenskapen åsidosätts miljön som anges av Blazor-Environment rubriken.

Föregående metod anger klientens miljö utan att ändra Blazor-Environment huvudets värde, och det ändrar inte heller serverprojektets konsolloggning av startmiljön för en Blazor Web App som har implementerat global interaktiv WebAssembly-rendering.

Om du vill logga miljön till konsolen i antingen en fristående Blazor WebAssembly app eller .Client projektet för en Blazor Web Appplacerar du följande C#-kod i Program filen efter att den WebAssemblyHost har skapats med WebAssemblyHostBuilder.CreateDefault och före raden som skapar och kör projektet (await builder.Build().RunAsync();):

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

Mer information om Blazor-uppstart finns i ASP.NET Core Blazor-uppstart.

Ange miljön på klientsidan via sidhuvud

Blazor WebAssembly appar kan ställa in miljön med Blazor-Environment header. Mer specifikt måste svarshuvudet anges för _framework/blazor.boot.json filen, men det är ingen skada att ange huvudet på filserversvar för andra Blazor filbegäranden eller hela Blazor distributionen.

Även om ramverket utfärdar huvudnamnet i kebab case med blandade bokstäver (Blazor), är du välkommen att använda kebab case med antingen enbart gemener eller enbart versaler (Blazor-Environment, blazor-environment).

För lokala utvecklingskörningar med Blazorden inbyggda utvecklingsservern kan du styra huvudets värde Blazor-Environment genom att ange värdet ASPNETCORE_ENVIRONMENT för miljövariabeln i projektets Properties/launchSettings.json fil. När du kör lokalt med utvecklingsservern är prioritetsordningen för att fastställa appens miljö Blazor.start, environment, . Du kan inte använda ASPNETCORE_ENVIRONMENT miljövariabelmetoden (launchSettings.json) i en distribuerad Blazor WebAssembly-applikation. Tekniken fungerar bara med utvecklingsservern på lokala körningar av appen.

IIS

I följande exempel för IIS läggs den anpassade rubriken (Blazor-Environment) till i den publicerade web.config-filen. Filen web.config finns i bin/Release/{TARGET FRAMEWORK}/publish mappen, där {TARGET FRAMEWORK} platshållaren är målramverket:

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

Anmärkning

Information om hur du använder en anpassad web.config fil för IIS som inte skrivs över när appen publiceras till publish mappen finns i Värd och distribuera ASP.NET Core Blazor WebAssembly med IIS.

Nginx

För Nginx-servrar använder du add_header direktivet från ngx_http_headers_module:

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

Mer information finns i följande resurser:

Apache

För Apache-servrar använder du Header direktivet från modulen mod_headers :

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

Mer information finns i följande resurser:

Ange miljön för Azure App Service

För en fristående Blazor WebAssembly app kan du ange miljön manuellt via startkonfigurationen eller Blazor-Environment huvud.

För en app på serversidan anger du miljön via en ASPNETCORE_ENVIRONMENT appinställning i Azure:

  1. Kontrollera att höljet för miljösegment i filnamnen för appinställningar matchar deras miljönamn exakt. Till exempel är Stagingfilnamnet för matchande appinställningar för appsettings.Staging.json miljön . Om filnamnet är appsettings.staging.json, (gemener s), så finns inte filen, och inställningarna i filen används inte i miljön för Staging.

  2. För Visual Studio-distribution kontrollerar du att appen har distribuerats till rätt distributionsfack. För en app med namnet BlazorAzureAppSampledistribueras appen till distributionsfacket Staging .

  3. I Azure-portalen för miljöns distributionsfack anger du miljön med appinställningen ASPNETCORE_ENVIRONMENT . För en app med namnet BlazorAzureAppSample heter testplatsen för App Service Slot BlazorAzureAppSample/Staging. För konfigurationen av Staging-platsen skapar du en appinställning för ASPNETCORE_ENVIRONMENT med värdet Staging. Inställning för distributionsplats är aktiverad för inställningen.

När det BlazorAzureAppSample/Staging begärs i en webbläsare läses appen in i Staging miljön på https://blazorazureappsample-staging.azurewebsites.net.

När appen läses in i webbläsaren, anger svarshuvudsamlingen för blazor.boot.json att huvudvärdet på Blazor-Environment är Staging.

Appinställningarna från appsettings.{ENVIRONMENT}.json-filen laddas av appen, där {ENVIRONMENT} används som platshållare för appens miljö. I föregående exempel läses inställningarna från appsettings.Staging.json filen in.

Läs miljön i en Blazor WebAssembly app

Hämta appens miljö i en komponent genom att injicera IWebAssemblyHostEnvironment och läsa egenskapen Environment.

ReadEnvironment.razor:

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

<h1>Environment example</h1>

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

Läs miljön på klientsidan i en Blazor Web App

Förutsatt att prerendering inte är inaktiverat för en komponent eller app, förinstalleras en komponent i .Client projektet på servern. Eftersom servern inte har någon registrerad IWebAssemblyHostEnvironment tjänst går det inte att mata in tjänsten och använda tjänstimplementeringens värdmiljötilläggsmetoder och egenskaper under serverförbegränsningen. Om du matar in tjänsten i en interaktiv WebAssembly- eller interaktiv autokomponent resulterar det i följande körningsfel:

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

Du kan åtgärda detta genom att skapa en anpassad tjänstimplementering för IWebAssemblyHostEnvironment på servern. Mer information och en exempelimplementering finns i custom service-implementeringen på serveravsnittet i artikeln Prerendering , som visas senare i dokumentationen Blazor .

Läs miljön på klientsidan under starten

Under uppstarten exponeras WebAssemblyHostBuilder via IWebAssemblyHostEnvironment-egenskapen, vilket möjliggör miljöspecifik logik i host builder-koden.

Program I filen:

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

Följande bekvämlighetsutökningar som tillhandahålls via WebAssemblyHostEnvironmentExtensions tillåter kontroll av den aktuella miljön för Development, Production, Staging och anpassade miljönamn.

Program I filen:

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

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

Egenskapen IWebAssemblyHostEnvironment.BaseAddress kan användas vid start när NavigationManager tjänsten inte är tillgänglig.

Ytterligare resurser