Udostępnij za pomocą


środowiska ASP.NET Core Blazor

Uwaga

Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z aktualną wersją, zobacz artykuł w wersji .NET 10.

Ostrzeżenie

Ta wersja ASP.NET Core nie jest już obsługiwana. Aby uzyskać więcej informacji, zobacz zasady pomocy technicznej platformy .NET i platformy .NET Core. Aby zapoznać się z aktualnym wydaniem, zobacz wersję tego artykułu dla platformy .NET 9.

W tym artykule wyjaśniono, jak skonfigurować i odczytać środowisko w Blazor aplikacji.

W przypadku lokalnego uruchamiania aplikacji środowisko domyślnie ma wartość Development. Po opublikowaniu aplikacji środowisko domyślnie ma wartość Production.

Zalecamy następujące konwencje:

  • Zawsze używaj nazwy środowiska "Development" na potrzeby programowania lokalnego. Dzieje się tak, ponieważ platforma ASP.NET Core oczekuje dokładnie tej nazwy podczas konfigurowania aplikacji i narzędzi dla lokalnych uruchomień programowania aplikacji.

  • W przypadku środowisk testowych, przejściowych i produkcyjnych zawsze publikuj i wdrażaj aplikację. Można użyć dowolnego schematu nazewnictwa środowiska dla opublikowanych aplikacji, ale zawsze używaj nazw plików ustawień aplikacji z segmentem środowiska, którego wielkość liter dokładnie odpowiada nazwie środowiska. W przypadku środowiska testowego użyj wartości "Staging" (capital "S") jako nazwy środowiska i nazwij plik ustawień aplikacji zgodnie (appsettings.Staging.json). W przypadku środowiska produkcyjnego użyj ciągu "Production" (capital "P") jako nazwy środowiska i nadaj plikowi ustawień aplikacji nazwę zgodną (appsettings.Production.json).

Ustawianie środowiska

Środowisko jest ustawione przy użyciu dowolnego z następujących podejść:

Na kliencie programu Blazor Web Appśrodowisko jest określane z serwera za pośrednictwem komentarza HTML, z którego deweloperzy nie korzystają:

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

W przypadku aplikacji autonomicznej Blazor WebAssembly ustaw środowisko za pomocą <WasmApplicationEnvironmentName> właściwości MSBuild w pliku projektu aplikacji (.csproj). Poniższy przykład ustawia Staging środowisko:

<WasmApplicationEnvironmentName>Staging</WasmApplicationEnvironmentName>

Domyślne środowiska są Development przeznaczone do kompilacji i Production publikowania.

Istnieje kilka metod ustawiania środowiska w aplikacji autonomicznej Blazor WebAssembly podczas operacji kompilacji/publikowania oraz jedno podejście do uruchamiania lub uruchamiania aplikacji na kliencie:

  • Ustaw wartość właściwości, gdy dotnet build lub dotnet publish jest wykonywane. Poniższy przykład ustawia środowisko na Staging, gdy aplikacja jest publikowana.

    dotnet publish -p:WasmApplicationEnvironmentName=Staging
    
  • Ustaw właściwość podczas kompilacji lub publikowania na podstawie konfiguracji aplikacji w programie Visual Studio. Następujące grupy właściwości mogą być używane w pliku projektu aplikacji lub w dowolnym pliku konfiguracji publikowania (.pubxml). Dodaj dodatkowe grupy właściwości dla innych używanych konfiguracji kompilacji.

    <PropertyGroup Condition="'$(Configuration)' == 'Debug'">
      <WasmApplicationEnvironmentName>Development</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
    <PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <WasmApplicationEnvironmentName>Production</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
  • Konfiguracja środowiska może być ustawiona na podstawie użycia profilu publikowania. W poniższym przykładzie pierwszy warunek ustawia środowisko na Development, gdy nie jest używany profil publikowania (dotyczy to zarówno operacji kompilacji, jak i publikowania bez profilu), natomiast drugi warunek ustawia środowisko na Production, gdy używany jest jakikolwiek profil publikowania.

    <PropertyGroup Condition="'$(PublishProfile)' == ''">
      <WasmApplicationEnvironmentName>Development</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
    <PropertyGroup Condition="'$(PublishProfile)' != ''">
      <WasmApplicationEnvironmentName>Production</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
  • Utwórz niestandardowy webowy punkt końcowy interfejsu API po stronie serwera. Aplikacja autonomiczna Blazor WebAssembly żąda swojego środowiska z internetowego interfejsu API podczas uruchamiania aplikacji lub na żądanie podczas jej działania. Wartość powinna zostać przekazana do WebAssemblyStartOptions lub withApplicationEnvironment.

    Uwaga

    Linki dokumentacyjne do źródła referencyjnego .NET zwykle ładują domyślną gałąź repozytorium, która odzwierciedla obecne prace rozwojowe nad nadchodzącą wersją .NET. Aby wybrać tag dla określonej wersji, użyj listy rozwijanej Przełącz gałęzie lub tagi. Aby uzyskać więcej informacji, zobacz Jak wybrać tag wersji kodu źródłowego ASP.NET Core (dotnet/AspNetCore.Docs #26205).

Na kliencie programu Blazor Web App, środowisko jest określane z serwera za pośrednictwem oprogramowania pośredniczącego, które przekazuje informacje o środowisku do przeglądarki poprzez nagłówek o nazwie Blazor-Environment. Nagłówek ustawia środowisko podczas tworzenia WebAssemblyHost w pliku po stronie klienta Program (WebAssemblyHostBuilder.CreateDefault).

W przypadku autonomicznej Blazor WebAssembly aplikacji działającej lokalnie, serwer deweloperski dodaje nagłówek Blazor-Environment z nazwą środowiska uzyskaną ze środowiska hostingu. Środowisko hostingu ustawia środowisko ze zmiennej ASPNETCORE_ENVIRONMENT środowiskowej ustanowionej przez plik projektu Properties/launchSettings.json . Wartość domyślna zmiennej środowiskowej w projekcie utworzonym na podstawie szablonu Blazor WebAssembly projektu to Development. Aby uzyskać więcej informacji, zobacz sekcję Ustawianie środowiska po stronie klienta za pomocą nagłówka .

Na kliencie hostowanej Blazor WebAssembly aplikacji środowisko jest określane z serwera za pośrednictwem oprogramowania pośredniczącego, które komunikuje środowisko do przeglądarki za pośrednictwem nagłówka o nazwie Blazor-Environment. Nagłówek ustawia środowisko podczas tworzenia WebAssemblyHost w pliku po stronie klienta Program (WebAssemblyHostBuilder.CreateDefault).

W przypadku autonomicznej Blazor WebAssembly aplikacji działającej lokalnie, serwer deweloperski dodaje nagłówek Blazor-Environment z nazwą środowiska uzyskaną ze środowiska hostingu. Środowisko hostingu ustawia środowisko ze zmiennej ASPNETCORE_ENVIRONMENT środowiskowej ustanowionej przez plik projektu Properties/launchSettings.json . Wartość domyślna zmiennej środowiskowej w projekcie utworzonym na podstawie szablonu Blazor WebAssembly projektu to Development. Aby uzyskać więcej informacji, zobacz sekcję Ustawianie środowiska po stronie klienta za pomocą nagłówka .

W przypadku aplikacji działających lokalnie w środowisku deweloperskim, aplikacja domyślnie korzysta ze środowiska Development. Opublikowanie aplikacji ustawia środowisko domyślnie na Production.

Aby uzyskać ogólne wskazówki dotyczące konfiguracji aplikacji ASP.NET Core, zobacz ASP.NET Core runtime environments (Środowiska uruchomieniowe ASP.NET Core). Aby uzyskać informacje na temat konfiguracji aplikacji po stronie serwera ze statycznymi plikami w środowiskach innych niż Development środowisko podczas programowania i testowania (na przykład Staging), zobacz Pliki statyczne w programie ASP.NET Core.

Ustawianie środowiska po stronie klienta za pomocą Blazor konfiguracji uruchamiania

Poniższy przykład rozpoczyna Blazor w środowisku Staging, jeśli nazwa hosta zawiera localhost. W przeciwnym razie środowisko jest ustawione na wartość domyślną.

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>

W poprzednim przykładzie symbol zastępczy {BLAZOR SCRIPT} to ścieżka i nazwa pliku skryptu Blazor. Aby uzyskać informacje o lokalizacji skryptu, zobacz Blazor.

Uwaga

W przypadku Blazor Web Apps, które ustawiają właściwość webAssembly>environment w konfiguracji Blazor.start, warto dopasować środowisko po stronie serwera do środowiska ustawionego na właściwości environment. W przeciwnym razie wstępne renderowanie na serwerze działa w innym środowisku niż renderowanie na kliencie, co powoduje dowolne skutki. Ogólne wskazówki dotyczące ustawiania środowiska dla programu Blazor Web Appmożna znaleźć w temacie ASP.NET Core runtime environments (Środowiska uruchomieniowe ASP.NET Core).

Samodzielny Blazor WebAssembly:

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

W poprzednim przykładzie symbol zastępczy {BLAZOR SCRIPT} to ścieżka i nazwa pliku skryptu Blazor. Aby uzyskać informacje o lokalizacji skryptu, zobacz Blazor.

Właściwość environment nadpisuje środowisko ustawione przez nagłówek Blazor-Environment.

Powyższe podejście określa środowisko klienta bez zmiany wartości nagłówka Blazor-Environment, ani nie wpływa na rejestrowanie w konsoli projektu serwera środowiska uruchamiania dla Blazor Web App elementu, który przyjął globalne renderowanie interakcyjne WebAssembly.

Aby zarejestrować środowisko w konsoli w aplikacji autonomicznej Blazor WebAssembly lub w projekcie .Client związanym z Blazor Web App, umieść następujący kod języka C# w pliku Program po utworzeniu WebAssemblyHost przez WebAssemblyHostBuilder.CreateDefault i przed wierszem, który kompiluje i uruchamia projekt (await builder.Build().RunAsync();):

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

Aby uzyskać więcej informacji na temat uruchamiania platformy Blazor, zobacz Uruchamianie platformy ASP.NET Core Blazor.

Ustawianie środowiska po stronie klienta za pomocą nagłówka

Blazor WebAssembly aplikacje mogą ustawiać środowisko za pomocą nagłówka Blazor-Environment . W szczególności nagłówek odpowiedzi musi być ustawiony dla _framework/blazor.boot.json pliku, ale nie zaszkodzi ustawienie nagłówka w odpowiedziach na żądaniach plików z serwera dla innych Blazor żądań plików lub całego procesu Blazor wdrożenia.

Blazor Mimo że framework wystawia nazwę nagłówka w formacie kebab z mieszanym formatem liter (Blazor-Environment), możesz użyć całkowicie małymi literami lub całkowicie wielkimi literami w formacie kebab (blazor-environment, BLAZOR-ENVIRONMENT).

W przypadku lokalnych sesji programistycznych z Blazor wbudowanym serwerem programistycznym, możesz kontrolować wartość nagłówka Blazor-Environment poprzez ustawienie wartości zmiennej środowiskowej ASPNETCORE_ENVIRONMENT w pliku projektu Properties/launchSettings.json. W przypadku uruchamiania lokalnie za pomocą serwera deweloperskiego, kolejność pierwszeństwa przy ustalaniu środowiska aplikacji to Blazor.start konfiguracja (environment klucz)>, nagłówek odpowiedzi (Blazor-Environment plik)blazor.boot.json>, zmienna środowiskowa (ASPNETCORE_ENVIRONMENT)launchSettings.json. Nie można użyć metody zmiennej środowiskowej ASPNETCORE_ENVIRONMENT (launchSettings.json) dla wdrożonej Blazor WebAssembly aplikacji. Technika ta działa tylko z serwerem deweloperów w lokalnych uruchomieniach aplikacji.

IIS

W poniższym przykładzie dla usług IIS nagłówek niestandardowy (Blazor-Environment) jest dodawany do opublikowanego web.config pliku. Plik web.config znajduje się w folderze bin/Release/{TARGET FRAMEWORK}/publish, gdzie {TARGET FRAMEWORK} jest symbolem zastępczym dla docelowej struktury.

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

Uwaga

Aby użyć pliku web.config dla IIS, który nie jest zastępowany podczas publikowania aplikacji do folderu publish, zobacz Hostowanie i wdrażanie ASP.NET Core Blazor WebAssembly z IIS.

Nginx

W przypadku serwerów Nginx użyj dyrektywy add_header z ngx_http_headers_module.

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

Aby uzyskać więcej informacji, zobacz następujące zasoby:

Apasz

W przypadku serwerów Apache użyj Header dyrektywy z modułu mod_headers :

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

Aby uzyskać więcej informacji, zobacz następujące zasoby:

Ustawianie środowiska dla usługi Azure App Service

W przypadku aplikacji autonomicznej Blazor WebAssembly można ręcznie ustawić środowisko za pomocą konfiguracji początkowej lub nagłówkaBlazor-Environment.

W przypadku aplikacji po stronie serwera ustaw środowisko za pomocą ASPNETCORE_ENVIRONMENT ustawienia aplikacji na platformie Azure:

  1. Upewnij się, że wielkość liter segmentów środowiska w nazwach plików ustawień aplikacji jest zgodna z wielkością liter nazwy środowiska. Na przykład zgodna nazwa pliku ustawień aplikacji dla Staging środowiska to appsettings.Staging.json. Jeśli nazwa pliku to appsettings.staging.json (małe litery „s”), plik nie jest zlokalizowany, a ustawienia w pliku nie są używane w środowisku Staging.

  2. W przypadku wdrożenia programu Visual Studio upewnij się, że aplikacja została wdrożona w odpowiednim miejscu wdrożenia. W przypadku aplikacji o nazwie BlazorAzureAppSampleaplikacja jest wdrażana w Staging miejscu wdrożenia.

  3. W portalu Azure dla slotu wdrożeniowego środowiska ustaw środowisko z użyciem ustawienia aplikacji ASPNETCORE_ENVIRONMENT. W przypadku aplikacji o nazwie BlazorAzureAppSample, przejściowe gniazdo App Service nosi nazwę BlazorAzureAppSample/Staging. Dla konfiguracji slotu Staging, utwórz ustawienie aplikacji dla ASPNETCORE_ENVIRONMENT o wartości Staging. Ustawienie Miejsca wdrożenia jest włączone dla tego ustawienia.

Gdy aplikacja BlazorAzureAppSample/Staging jest wywoływana w przeglądarce, ładuje się w środowisku Staging przy https://blazorazureappsample-staging.azurewebsites.net.

Po załadowaniu aplikacji w przeglądarce, kolekcja nagłówków odpowiedzi wskazuje, że wartość nagłówka blazor.boot.json to Blazor-Environment.

Ustawienia aplikacji z pliku appsettings.{ENVIRONMENT}.json są ładowane przez aplikację, gdzie {ENVIRONMENT} element zastępczy jest środowiskiem aplikacji. W poprzednim przykładzie są ładowane ustawienia z appsettings.Staging.json pliku.

Odczytywanie otoczenia w aplikacji Blazor WebAssembly

Uzyskaj środowisko aplikacji w składniku, wstrzykując IWebAssemblyHostEnvironment i odczytując właściwość Environment.

ReadEnvironment.razor:

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

<h1>Environment example</h1>

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

Odczytywanie środowiska po stronie klienta w Blazor Web App

Zakładając, że prerenderowanie nie jest wyłączone dla składnika lub aplikacji, składnik w projekcie .Client jest prerenderowany na serwerze. Ponieważ serwer nie ma w swoim rejestrze zarejestrowanej usługi IWebAssemblyHostEnvironment, nie można wstrzyknąć tej usługi ani skorzystać z metod rozszerzeń i właściwości środowiska hosta związanych z implementacją tej usługi podczas prerenderingu serwera. Wstrzykiwanie usługi do interakcyjnego składnika WebAssembly lub Interactive Auto powoduje następujący błąd środowiska uruchomieniowego:

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

Aby rozwiązać ten problem, utwórz niestandardową implementację usługi dla IWebAssemblyHostEnvironment na serwerze. Aby uzyskać więcej informacji i przykładową implementację, zobacz sekcję Implementacja usługi niestandardowej na serwerze artykułu Prerendering , który pojawia się w Blazor dalszej części dokumentacji.

Odczytywanie środowiska po stronie klienta podczas uruchamiania

Podczas uruchamiania, WebAssemblyHostBuilder udostępnia właściwość IWebAssemblyHostEnvironment, co umożliwia wykorzystanie logiki specyficznej dla środowiska w kodzie budowniczego hosta.

W pliku Program:

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

Następujące wygodne metody rozszerzenia udostępniane przez WebAssemblyHostEnvironmentExtensions umożliwiają sprawdzanie bieżącego środowiska dla Development, Production, Staging oraz niestandardowych nazw środowisk:

W pliku Program:

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

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

Właściwość IWebAssemblyHostEnvironment.BaseAddress może być używana podczas uruchamiania, gdy usługa NavigationManager nie jest dostępna.

Dodatkowe zasoby