Bagikan melalui


Lingkungan ASP.NET Core Blazor

Nota

Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 10 dari artikel ini.

Peringatan

Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 9 dari artikel ini.

Artikel ini menjelaskan cara mengonfigurasi dan membaca lingkungan dalam aplikasi Blazor .

Saat menjalankan aplikasi secara lokal, lingkungan secara default diatur ke Development. Saat aplikasi diterbitkan, lingkungan default ke Production.

Kami merekomendasikan konvensi berikut:

  • Selalu gunakan nama lingkungan "Development" untuk pengembangan lokal. Ini karena kerangka kerja ASP.NET Core mengharapkan nama tersebut persis saat mengonfigurasi aplikasi dan alat untuk eksekusi pengembangan lokal aplikasi.

  • Untuk lingkungan pengujian, penahapan, dan produksi, selalu terbitkan dan sebarkan aplikasi. Anda dapat menggunakan skema penamaan lingkungan apa pun yang Anda inginkan untuk aplikasi yang diterbitkan, tetapi selalu gunakan nama file pengaturan aplikasi dengan casing segmen lingkungan yang sama persis dengan nama lingkungan. Untuk penahapan, gunakan "Staging" (modal "S") sebagai nama lingkungan, dan beri nama file pengaturan aplikasi agar cocok (appsettings.Staging.json). Untuk produksi, gunakan "Production" (huruf besar "P") sebagai nama lingkungan, dan beri nama file pengaturan aplikasi agar sesuai (appsettings.Production.json).

Mengatur lingkungan

Lingkungan diatur menggunakan salah satu pendekatan berikut:

Pada klien untuk Blazor Web App, lingkungan ditentukan dari server melalui komentar HTML yang tidak berinteraksi dengan pengembang:

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

Untuk aplikasi mandiri Blazor WebAssembly , atur lingkungan dengan <WasmApplicationEnvironmentName> properti MSBuild di file proyek aplikasi (.csproj). Contoh berikut menyetel lingkungan Staging:

<WasmApplicationEnvironmentName>Staging</WasmApplicationEnvironmentName>

Lingkungan default adalah Development untuk build dan Production untuk dipublikasikan.

Ada beberapa pendekatan untuk mengatur lingkungan di aplikasi mandiri Blazor WebAssembly selama operasi build/publish dan satu pendekatan untuk aplikasi yang dimulai atau berjalan pada klien:

  • Atur nilai properti saat dotnet build atau dotnet publish dijalankan. Contoh berikut mengatur lingkungan ke Staging saat aplikasi diterbitkan:

    dotnet publish -p:WasmApplicationEnvironmentName=Staging
    
  • Atur properti selama build atau publikasikan berdasarkan konfigurasi aplikasi di Visual Studio. Grup properti berikut dapat digunakan dalam file proyek aplikasi atau file konfigurasi penerbitan apa pun (.pubxml). Tambahkan grup properti tambahan untuk konfigurasi build lain yang digunakan.

    <PropertyGroup Condition="'$(Configuration)' == 'Debug'">
      <WasmApplicationEnvironmentName>Development</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
    <PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <WasmApplicationEnvironmentName>Production</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
  • Lingkungan dapat diatur berdasarkan penggunaan profil penerbitan. Dalam contoh berikut, kondisi pertama mengatur lingkungan ke Development ketika tidak ada profil penerbitan yang digunakan (berlaku untuk operasi build dan terbitkan tanpa profil), sementara kondisi kedua mencakup pengaturan lingkungan ke Production ketika profil publikasi digunakan:

    <PropertyGroup Condition="'$(PublishProfile)' == ''">
      <WasmApplicationEnvironmentName>Development</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
    <PropertyGroup Condition="'$(PublishProfile)' != ''">
      <WasmApplicationEnvironmentName>Production</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
  • Buat titik akhir API web sisi server kustom. Aplikasi mandiri Blazor WebAssembly meminta lingkungannya dari API web baik di startup aplikasi atau sesuai permintaan saat sedang berjalan. Nilai harus diteruskan ke WebAssemblyStartOptions atau dengan withApplicationEnvironment.

    Nota

    Tautan dokumentasi ke sumber referensi .NET biasanya memuat cabang default repositori, yang mewakili pengembangan saat ini untuk rilis .NET berikutnya. Untuk memilih tag untuk rilis tertentu, gunakan menu dropdown Ganti cabang atau tag. Untuk informasi lebih lanjut, lihat Cara memilih tag versi kode sumber ASP.NET Core (dotnet/AspNetCore.Docs #26205).

Pada klien untuk Blazor Web App, lingkungan ditentukan dari server melalui middleware yang mengomunikasikan lingkungan ke browser melalui header bernama Blazor-Environment. Header menetapkan konteks saat WebAssemblyHost dibuat dalam file klien sisi Program (WebAssemblyHostBuilder.CreateDefault).

Untuk aplikasi mandiri Blazor WebAssembly yang berjalan secara lokal, server pengembangan menambahkan Blazor-Environment header dengan nama lingkungan yang diperoleh dari lingkungan hosting. Lingkungan hosting mengatur lingkungan dari variabel lingkungan yang ASPNETCORE_ENVIRONMENT ditetapkan oleh file proyek Properties/launchSettings.json . Nilai default variabel lingkungan dalam proyek yang dibuat dari Blazor WebAssembly templat proyek adalah Development. Untuk informasi selengkapnya, lihat bagian Atur lingkungan sisi klien melalui header .

Pada klien aplikasi yang dihosting Blazor WebAssembly , lingkungan ditentukan dari server melalui middleware yang mengomunikasikan lingkungan ke browser melalui header bernama Blazor-Environment. Header menetapkan konteks saat WebAssemblyHost dibuat dalam file klien sisi Program (WebAssemblyHostBuilder.CreateDefault).

Untuk aplikasi mandiri Blazor WebAssembly yang berjalan secara lokal, server pengembangan menambahkan Blazor-Environment header dengan nama lingkungan yang diperoleh dari lingkungan hosting. Lingkungan hosting mengatur lingkungan dari variabel lingkungan yang ASPNETCORE_ENVIRONMENT ditetapkan oleh file proyek Properties/launchSettings.json . Nilai default variabel lingkungan dalam proyek yang dibuat dari Blazor WebAssembly templat proyek adalah Development. Untuk informasi selengkapnya, lihat bagian Atur lingkungan sisi klien melalui header .

Untuk aplikasi yang berjalan secara lokal selama tahap pengembangan, aplikasi akan menggunakan secara default lingkungan Development. Menerbitkan aplikasi mengatur lingkungan menjadi Production.

Untuk panduan umum tentang konfigurasi aplikasi ASP.NET Core, lihat lingkungan runtime ASP.NET Core. Untuk konfigurasi aplikasi sisi server dengan file statis di lingkungan selain Development lingkungan selama pengembangan dan pengujian (misalnya, Staging), lihat File statis di ASP.NET Core.

Mengatur lingkungan klien melalui konfigurasi startup Blazor

Contoh berikut dimulai Blazor di Staging lingkungan jika nama host menyertakan localhost. Jika tidak, lingkungan diatur ke nilai defaultnya.

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>

Dalam contoh sebelumnya, {BLAZOR SCRIPT} placeholder adalah Blazor jalur skrip dan nama file. Untuk lokasi skrip, lihat Blazor proyek ASP.NET Core.

Nota

Untuk Blazor Web App yang menetapkan properti webAssembly>environment dalam konfigurasi Blazor.start, bijaksana untuk mencocokkan lingkungan sisi server dengan lingkungan yang diatur pada properti environment. Sebaliknya, prarendering di server beroperasi di bawah lingkungan yang berbeda dengan penyajian di klien, yang menghasilkan efek yang tidak menentu. Untuk panduan umum tentang mengatur lingkungan untuk Blazor Web App, lihat lingkungan runtime ASP.NET Core.

Mandiri Blazor WebAssembly:

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

Dalam contoh sebelumnya, {BLAZOR SCRIPT} placeholder adalah Blazor jalur skrip dan nama file. Untuk lokasi skrip, lihat Blazor proyek ASP.NET Core.

Penggunaan properti environment akan menggantikan lingkungan yang ditetapkan oleh Blazor-Environment header.

Pendekatan sebelumnya mengonfigurasi lingkungan klien tanpa mengubah nilai dari header, dan juga tidak mengubah pencatatan log konsol proyek server dari lingkungan startup untuk Blazor-Environment yang telah mengadopsi rendering WebAssembly Interaktif global.

Untuk mencatat lingkungan aplikasi ke konsol, baik pada aplikasi mandiri Blazor WebAssembly atau proyek .Client dari Blazor Web App, tempatkan kode C# berikut ini dalam file Program setelah WebAssemblyHost dibuat dengan WebAssemblyHostBuilder.CreateDefault dan sebelum baris yang membangun dan menjalankan proyek (await builder.Build().RunAsync();).

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

Untuk informasi lebih lanjut tentang startup Blazor, lihat startup BlazorASP.NET Core.

Mengatur lingkungan sisi klien melalui header

Blazor WebAssembly aplikasi dapat mengatur lingkungan dengan Blazor-Environment header. Secara khusus, header respons harus diatur pada file _framework/blazor.boot.json, tetapi tidak ada salahnya mengatur header pada respons server file untuk permintaan file lain Blazor atau pada seluruh penerapan Blazor.

Blazor Meskipun kerangka kerja mengeluarkan nama header dalam kasus kebab dengan huruf campuran (Blazor-Environment), Anda dipersilakan untuk menggunakan huruf kebab all-lower atau all-upper (blazor-environment, BLAZOR-ENVIRONMENT).

Untuk menjalankan pengembangan lokal dengan server pengembangan bawaan Blazor, Anda dapat mengontrol nilai header Blazor-Environment dengan mengatur nilai variabel lingkungan ASPNETCORE_ENVIRONMENT dalam file Properties/launchSettings.json proyek. Saat dijalankan secara lokal dengan server pengembangan, urutan prioritas untuk menentukan lingkungan aplikasi adalah Blazor.startenvironment, header respons (> file), Blazor-Environment variabel lingkungan blazor.boot.json(>). Anda tidak dapat menggunakan pendekatan variabel lingkungan ASPNETCORE_ENVIRONMENT (launchSettings.json) untuk aplikasi yang telah di-deploy Blazor WebAssembly. Teknik ini hanya berfungsi dengan server pengembangan pada eksekusi lokal aplikasi.

IIS

Dalam contoh berikut untuk IIS, header kustom (Blazor-Environment) ditambahkan ke file yang diterbitkan web.config . File web.config terletak di bin/Release/{TARGET FRAMEWORK}/publish folder , di mana {TARGET FRAMEWORK} tempat penampung adalah kerangka kerja target:

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

Nota

Untuk menggunakan file kustom web.config untuk IIS yang tidak akan tertimpa saat aplikasi diterbitkan ke folder publish, lihat Hosting dan penyebaran ASP.NET Core Blazor WebAssembly dengan IIS.

Nginx.

Untuk server Nginx, gunakan arahan add_header dari ngx_http_headers_module:

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

Untuk informasi selengkapnya, lihat sumber daya berikut ini:

Apache

Untuk server Apache, gunakan arahan Header dari mod_headers modul:

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

Untuk informasi selengkapnya, lihat sumber daya berikut ini:

Mengatur lingkungan untuk Azure App Service

Untuk aplikasi mandiri Blazor WebAssembly , Anda dapat mengatur lingkungan secara manual melalui konfigurasi mulai atau Blazor-Environment header.

Untuk aplikasi sisi server, atur lingkungan melalui ASPNETCORE_ENVIRONMENT pengaturan aplikasi di Azure:

  1. Pastikan bahwa casing bagian lingkungan dalam nama file pengaturan aplikasi sesuai dengan casing nama lingkungan secara tepat. Misalnya, nama file pengaturan aplikasi yang cocok untuk Staging lingkungan adalah appsettings.Staging.json. Jika nama file adalah appsettings.staging.json (huruf kecil "s"), file tidak berada, dan pengaturan dalam file tidak digunakan di Staging lingkungan.

  2. Untuk penyebaran Visual Studio, konfirmasikan bahwa aplikasi disebarkan ke slot penyebaran yang benar. Untuk sebuah aplikasi bernama BlazorAzureAppSample, aplikasi tersebut disebarkan di slot penyebaran Staging.

  3. Di portal Azure untuk slot penempatan lingkungan, atur lingkungan dengan pengaturan aplikasi ASPNETCORE_ENVIRONMENT. Untuk aplikasi bernama BlazorAzureAppSample, Slot Penahapan App Service diberi nama BlazorAzureAppSample/Staging. Untuk konfigurasi slot Staging, buat pengaturan aplikasi ASPNETCORE_ENVIRONMENT dengan nilai Staging. Pengaturan slot penyebaran diaktifkan untuk pengaturan.

Saat diminta di browser, aplikasi BlazorAzureAppSample/Staging dimuat di lingkungan Staging di https://blazorazureappsample-staging.azurewebsites.net.

Saat aplikasi dimuat di browser, kumpulan header respons untuk blazor.boot.json menunjukkan bahwa Blazor-Environment nilai header adalah Staging.

Pengaturan aplikasi dari appsettings.{ENVIRONMENT}.json file dimuat oleh aplikasi, di mana {ENVIRONMENT} tempat penampung adalah lingkungan aplikasi. Dalam contoh sebelumnya, pengaturan dari file appsettings.Staging.json dimuat.

Membaca lingkungan pada Blazor WebAssembly aplikasi

Dapatkan lingkungan aplikasi dalam komponen dengan menyuntikkan IWebAssemblyHostEnvironment dan membaca Environment properti .

ReadEnvironment.razor:

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

<h1>Environment example</h1>

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

Membaca sisi klien lingkungan dalam Blazor Web App

Dengan asumsi bahwa pra-penyajian tidak dinonaktifkan untuk komponen atau aplikasi, komponen dalam .Client proyek telah dirender di server. Karena server tidak memiliki layanan IWebAssemblyHostEnvironment yang terdaftar, tidak memungkinkan untuk menyuntikkan layanan dan menggunakan metode serta properti ekstensi lingkungan host dari implementasi layanan selama prarendering server. Menyuntikkan layanan ke komponen Interactive WebAssembly atau Interactive Auto menghasilkan kesalahan runtime berikut:

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

Untuk mengatasi hal ini, buat implementasi layanan kustom untuk IWebAssemblyHostEnvironment di server. Untuk informasi selengkapnya dan contoh implementasi, lihat implementasi layanan kustom di bagian server dari artikel Prarendering , yang muncul nanti dalam Blazor dokumentasi.

Membaca lingkungan sisi klien selama startup

Selama startup, WebAssemblyHostBuilder mengekspos IWebAssemblyHostEnvironment melalui HostEnvironment properti , yang memungkinkan logika khusus lingkungan dalam kode pembangun host.

Dalam file Program:

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

Metode ekstensi berikut yang disediakan melalui WebAssemblyHostEnvironmentExtensions memungkinkan untuk memeriksa lingkungan saat ini untuk Development, Production, Staging, dan nama lingkungan kustom:

Dalam file Program:

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

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

Properti IWebAssemblyHostEnvironment.BaseAddress dapat digunakan selama startup saat NavigationManager layanan tidak tersedia.

Sumber daya tambahan