ASP.NET Core Blazor-Umgebungen
Hinweis
Dies ist nicht die neueste Version dieses Artikels. Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
Warnung
Diese Version von ASP.NET Core wird nicht mehr unterstützt. Weitere Informationen finden Sie in der Supportrichtlinie für .NET und .NET Core. Informationen zum aktuellen Release finden Sie in der .NET 8-Version dieses Artikels.
Wichtig
Diese Informationen beziehen sich auf ein Vorabversionsprodukt, das vor der kommerziellen Freigabe möglicherweise noch wesentlichen Änderungen unterliegt. Microsoft gibt keine Garantie, weder ausdrücklich noch impliziert, hinsichtlich der hier bereitgestellten Informationen.
Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
In diesem Artikel wird erläutert, wie Sie die Umgebung in einerBlazor-App konfigurieren und lesen.
Wenn eine App lokal ausgeführt wird, wird die Umgebung standardmäßig auf Development
festgelegt. Wenn eine App lokal ausgeführt wird, wird die Umgebung standardmäßig auf Production
festgelegt.
Empfohlene Konventionen:
Verwenden Sie für die lokale Entwicklung immer den Umgebungsnamen
Development
. Das ASP.NET Core-Framework erwartet genau diesen Namen, wenn die App und die Tools für die lokale Entwicklung einer App konfiguriert werden.Für Test-, Staging- und Produktionsumgebungen sollte die App immer veröffentlicht und bereitgestellt werden. Sie können ein beliebiges Umgebungsbenennungsschema für veröffentlichte Apps verwenden. Verwenden Sie aber immer App-Einstellungsdateinamen mit einer Groß-/Kleinschreibung des Umgebungssegments, die exakt mit dem Umgebungsnamen übereinstimmt. Verwenden Sie für die Stagingumgebung
Staging
(mit großem „S“) als Umgebungsname, und benennen Sie die App-Einstellungsdatei entsprechend (appsettings.Staging.json
). Verwenden Sie für die ProduktionsumgebungProduction
(mit großem „P“) als Umgebungsname, und benennen Sie die App-Einstellungsdatei entsprechend (appsettings.Production.json
).
Festlegen der Umgebung
Verwenden Sie zum Einrichten der Umgebung einen der folgenden Ansätze:
- Blazor Web App: Verwenden Sie alle unter Verwenden von mehreren Umgebungen in ASP.NET Core beschriebenen Ansätze für allgemeine ASP.NET Core-Apps.
- Blazor Web App oder eigenständige Blazor WebAssembly-App: Blazor-Startkonfiguration
- Eigenständige Blazor WebAssembly-App:
blazor-environment
-Header - Blazor Web App oder eigenständige Blazor WebAssembly-App: Azure App Service
Auf dem Client für eine Blazor Web App wird die Umgebung vom Server festgelegt. Dazu teilt eine Middleware die Umgebung mithilfe eines Headers namens blazor-environment
dem Browser mit. Der Header legt die Umgebung fest, wenn der WebAssemblyHost in der clientseitigen Program
-Datei (WebAssemblyHostBuilder.CreateDefault) erstellt wird.
Verwenden Sie zum Einrichten der Umgebung einen der folgenden Ansätze:
- Blazor Server: Verwenden Sie alle unter Verwenden von mehreren Umgebungen in ASP.NET Core beschriebenen Ansätze für allgemeine ASP.NET Core-Apps.
- Blazor Server oder Blazor WebAssembly: Blazor-Startkonfiguration
- Blazor WebAssembly:
blazor-environment
-Header - Blazor Server oder Blazor WebAssembly: Azure App Service
Auf dem Client für eine Blazor Web App oder den Client einer gehosteten Blazor WebAssembly-App wird die Umgebung vom Server festgelegt. Dazu teilt eine Middleware die Umgebung mithilfe eines Headers mit dem Namen blazor-environment
dem Browser mit. Der Header legt die Umgebung fest, wenn der WebAssemblyHost in der clientseitigen Program
-Datei (WebAssemblyHostBuilder.CreateDefault) erstellt wird.
Wird eine eigenständige Blazor WebAssembly-App lokal ausgeführt, fügt der Entwicklungsserver den blazor-environment
-Header hinzu.
Bei Apps, die lokal in der Entwicklung ausgeführt werden, verwendet die App standardmäßig die Development
-Umgebung. Beim Veröffentlichen der App wird die Umgebung standardmäßig auf Production
festgelegt.
Allgemeine Leitfäden zur Konfiguration von ASP.NET Core-Apps finden Sie unter Verwenden von mehreren Umgebungen in ASP.NET Core. Informationen zur serverseitigen App-Konfiguration für statische Dateien in anderen Umgebungen als der Development-Umgebung bei der Entwicklung und bei Tests (z. B. Staging) finden Sie unter ASP.NET Core Blazor: statische Dateien.
Festlegen der clientseitigen Umgebung per Blazor-Startkonfiguration
Im folgenden Beispiel wird Blazor in der Staging
-Umgebung gestartet, wenn der Hostname localhost
enthält. Andernfalls wird die Umgebung auf den Standardwert festgelegt.
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>
Im vorangegangenen Beispiel entspricht der {BLAZOR SCRIPT}
-Platzhalter dem Pfad und dem Dateinamen des Blazor-Skripts. Informationen zum Speicherort des Skripts finden Sie unter Projektstruktur für ASP.NET Core Blazor.
Hinweis
Für Blazor Web Apps, die die Eigenschaft webAssembly
>environment
in der Konfiguration Blazor.start
festlegen, empfiehlt es sich, die serverseitige Umgebung mit der Umgebung abzugleichen, die in der Eigenschaft environment
festgelegt ist. Andernfalls wird für das Prerendering auf dem Server eine andere Umgebung verwendet als für das Rendern auf dem Client, was unvorhersehbare Auswirkungen hat. Weitere Informationen zum Festlegen der Umgebung für eine Blazor Web App finden Sie unter Verwenden von mehreren Umgebungen in ASP.NET Core.
Blazor WebAssembly eigenständig:
<script src="{BLAZOR SCRIPT}" autostart="false"></script>
<script>
if (window.location.hostname.includes("localhost")) {
Blazor.start({
environment: "Staging"
});
} else {
Blazor.start();
}
</script>
Im vorangegangenen Beispiel entspricht der {BLAZOR SCRIPT}
-Platzhalter dem Pfad und Dateinamen des Blazor-Skripts. Informationen zum Speicherort des Skripts finden Sie unter Projektstruktur für ASP.NET Core Blazor.
Die Verwendung der environment
-Eigenschaft überschreibt die durch den blazor-environment
-Header festgelegte Umgebung.
Beim obigen Ansatz wird die Umgebung des Clients festgelegt, ohne den Wert des Headers blazor-environment
zu ändern, und auch die serverprojektspezifische Konsolenprotokollierung der Startumgebung für eine Blazor Web App, die das globale interaktive WebAssembly-Rendering eingeführt hat, wird nicht geändert.
Wenn Sie die Umgebung entweder in einem eigenständigen Blazor WebAssembly-Projekt oder im .Client
-Projekt einer Blazor Web App in der Konsole protokollieren möchten, müssen Sie in der Datei Program
den folgenden C#-Code platzieren, und zwar nach der Erstellung von WebAssemblyHost mit WebAssemblyHostBuilder.CreateDefault und vor der Zeile, die das Projekt erstellt und ausführt (await builder.Build().RunAsync();
):
Console.WriteLine(
$"Client Hosting Environment: {builder.HostEnvironment.Environment}");
Weitere Informationen zum Start von Blazor finden Sie unter Starten von ASP.NET Core Blazor.
Festlegen der clientseitigen Umgebung per Header
Blazor WebAssembly-Apps können die Umgebung mit dem blazor-environment
-Header festlegen.
Im folgenden Beispiel für IIS wird der benutzerdefinierte Header (blazor-environment
) zu der veröffentlichten web.config
-Datei hinzugefügt. Die web.config
-Datei befindet sich im Ordner bin/Release/{TARGET FRAMEWORK}/publish
, wobei der Platzhalter {TARGET FRAMEWORK}
für das Zielframework steht:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
...
<httpProtocol>
<customHeaders>
<add name="blazor-environment" value="Staging" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
Hinweis
Informationen zum Verwenden einer benutzerdefinierten Datei web.config
für IIS, die nicht überschrieben wird, wenn die App im Ordner publish
veröffentlicht wird, finden Sie unter Hosten und Bereitstellen von Blazor WebAssembly in ASP.NET Core.
Das Blazor-Framework gibt den Headernamen zwar vollständig in Kleinbuchstaben aus (blazor-environment
), Sie können aber eine beliebige Groß-/Kleinschreibung verwenden. Beispielsweise werden auch Headernamen unterstützt, in denen jedes Wort mit einem Großbuchstaben beginnt (Blazor-Environment
).
Festlegen der Umgebung für Azure App Service
Für eigenständige Blazor WebAssembly-Apps können Sie die Umgebung manuell über die Startkonfiguration oder den blazor-environment
-Header festlegen.
Legen Sie für eine serverseitige App die Umgebung über eine ASPNETCORE_ENVIRONMENT
-App-Einstellung in Azure fest:
Vergewissern Sie sich, dass die Groß-/Kleinschreibung von Umgebungssegmenten in Dateinamen der App-Einstellungen genau mit der Groß-/Kleinschreibung ihres Umgebungsnamens übereinstimmt. Der übereinstimmende Dateiname der App-Einstellungen für die
Staging
-Umgebung lautet beispielsweiseappsettings.Staging.json
. Wenn der Dateinameappsettings.staging.json
lautet (mit kleinems
), wird die Datei nicht gefunden, und die Einstellungen in der Datei werden in derStaging
-Umgebung nicht verwendet.Vergewissern Sie sich bei einer Visual Studio-Bereitstellung, dass die App im richtigen Bereitstellungsslot bereitgestellt wird. Bei einer App mit dem Namen
BlazorAzureAppSample
wird die App imStaging
-Bereitstellungsslot bereitgestellt.Legen Sie im Azure-Portal für den Bereitstellungsslot der Umgebung die Umgebung mit der
ASPNETCORE_ENVIRONMENT
-App-Einstellung fest. Bei einer App mit dem NamenBlazorAzureAppSample
erhält der Staging-Slot von App Service den NamenBlazorAzureAppSample/Staging
. Erstellen Sie für die Konfiguration desStaging
-Slots eine App-Einstellung fürASPNETCORE_ENVIRONMENT
mit dem WertStaging
. Bereitstellungssloteinstellung ist für diese Einstellung aktiviert.
Bei Anforderung in einem Browser wird die BlazorAzureAppSample/Staging
-App in die Staging
-Umgebung unter https://blazorazureappsample-staging.azurewebsites.net
geladen.
Beim Laden der App in den Browser wird in der Antwortheadersammlung für blazor.boot.json
angegeben, dass der blazor-environment
-Headerwert Staging
lautet.
App-Einstellungen aus der Datei appsettings.{ENVIRONMENT}.json
werden durch die App geladen, wobei der Platzhalter {ENVIRONMENT}
für die Umgebung der App steht. Im vorherigen Beispiel werden Einstellungen aus der Datei appsettings.Staging.json
geladen.
Lesen der Umgebung in einer Blazor WebAssembly-App
Rufen Sie die Umgebung der App in einer Komponente ab, indem Sie IWebAssemblyHostEnvironment einfügen und die Environment-Eigenschaft lesen.
ReadEnvironment.razor
:
@page "/read-environment"
@using Microsoft.AspNetCore.Components.WebAssembly.Hosting
@inject IWebAssemblyHostEnvironment Env
<h1>Environment example</h1>
<p>Environment: @Env.Environment</p>
Clientseitiges Lesen der Umgebung in einer Blazor Web App
Sofern das Prerendering nicht für eine Komponente oder für die App deaktiviert ist, wird eine Komponente im .Client
-Projekt auf dem Server vorab gerendert. Da der Server über keinen registrierten Dienst vom Typ IWebAssemblyHostEnvironment verfügt, ist es nicht möglich, den Dienst einzufügen und während des serverseitigen Prerenderings die hostumgebungsspezifischen Erweiterungsmethoden und Eigenschaften der Dienstimplementierung zu verwenden. Wenn der Dienst in eine Komponente vom Typ „WebAssembly (interaktiv)“ oder „Auto (interaktiv)“ eingefügt wird, tritt folgender Laufzeitfehler auf:
There is no registered service of type 'Microsoft.AspNetCore.Components.WebAssembly.Hosting.IWebAssemblyHostEnvironment'.
Erstellen Sie zur Behebung dieses Fehlers auf dem Server eine benutzerdefinierte Dienstimplementierung für IWebAssemblyHostEnvironment. Fügen Sie dem Serverprojekt die folgende Klasse hinzu:
ServerHostEnvironment.cs
:
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.AspNetCore.Components;
public class ServerHostEnvironment(IWebHostEnvironment env, NavigationManager nav) :
IWebAssemblyHostEnvironment
{
public string Environment => env.EnvironmentName;
public string BaseAddress => nav.BaseUri;
}
Registrieren Sie den Dienst in der Datei Program
des Serverprojekts:
builder.Services.TryAddScoped<IWebAssemblyHostEnvironment, ServerHostEnvironment>();
Nun kann der IWebAssemblyHostEnvironment-Dienst in eine Komponente vom Typ „WebAssembly (interaktiv)“ oder „Auto (interaktiv)“ eingefügt und so verwendet werden, wie im Abschnitt Lesen der Umgebung in einer Blazor WebAssembly-App gezeigt.
Das vorangehende Beispiel zeigt gegebenenfalls, dass sich die Serverumgebung von der Clientumgebung unterscheiden kann. Dies wird jedoch nicht empfohlen und kann zu unvorhersehbaren Ergebnissen führen. Beim Festlegen der Umgebung in einer Blazor Web App empfiehlt es sich, die serverseitige Projektumgebung und die .Client
-Projektumgebung aufeinander abzustimmen. Sehen Sie sich das folgende Szenario in einer Test-App an:
- Implementieren Sie die clientseitige (
webassembly
) Umgebungseigenschaft mit derStaging
-Umgebung überBlazor.start
. Ein Beispiel finden Sie im Abschnitt Festlegen der clientseitigen Umgebung per Startkonfiguration. - Lassen Sie die serverseitige Datei
Properties/launchSettings.json
unverändert. Lassen Sie den AbschnittenvironmentVariables
mit der UmgebungsvariablenASPNETCORE_ENVIRONMENT
aufDevelopment
festgelegt.
Auf der Benutzeroberfläche können Sie sehen, wie sich der Wert der Eigenschaft IWebAssemblyHostEnvironment.Environment ändert.
Wenn das Prerendering auf dem Server erfolgt, wird die Komponente in der Development
-Umgebung gerendert:
Environment: Development
Wenn die Komponente ein bis zwei Sekunden später erneut gerendert wird, ändern sich die Werte, nachdem das Blazor-Paket heruntergeladen und die .NET WebAssembly-Runtime aktiviert wurde, um zu zeigen, dass der Client in der Staging
-Umgebung auf dem Client ausgeführt wird:
Environment: Staging
Das obige Beispiel zeigt, warum empfohlen wird, die Serverumgebung für Entwicklungs-, Test- und Produktionsbereitstellungen so festzulegen, dass sie mit der Clientumgebung übereinstimmt.
Weitere Informationen finden Sie im Abschnitt Fehler beim Auflösen clientseitiger Dienste während des Prerenderings des Artikels ASP.NET Core Blazor-Rendermodi weiter unten in der Blazor-Dokumentation.
Lesen der clientseitigen Umgebung beim Start
Während des Starts macht WebAssemblyHostBuilder die Schnittstelle IWebAssemblyHostEnvironment über die HostEnvironment -Eigenschaft verfügbar, die umgebungsspezifische Logik im Code des Host-Generators ermöglicht.
Gehen Sie in der Program
-Datei folgendermaßen vor:
if (builder.HostEnvironment.Environment == "Custom")
{
...
};
Die folgenden benutzerfreundlichen, von WebAssemblyHostEnvironmentExtensions bereitgestellten Erweiterungsmethoden ermöglichen die Überprüfung der aktuellen Umgebung auf die Namen Development
, Production
, Staging
sowie auf benutzerdefinierte Umgebungsnamen:
Gehen Sie in der Program
-Datei folgendermaßen vor:
if (builder.HostEnvironment.IsStaging())
{
...
};
if (builder.HostEnvironment.IsEnvironment("Custom"))
{
...
};
Die IWebAssemblyHostEnvironment.BaseAddress-Eigenschaft kann während des Starts verwendet werden, wenn der NavigationManager-Dienst nicht verfügbar ist.