Bagikan melalui


file statis ASP.NET Core Blazor

Catatan

Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 8 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 8 dari artikel ini.

Penting

Informasi ini berkaitan dengan produk pra-rilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.

Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.

Artikel ini menjelaskan Blazor konfigurasi aplikasi untuk menyajikan file statis.

Middleware aset statis

Bagian ini berlaku untuk aplikasi sisi Blazor server.

Melayani aset statis dikelola oleh salah satu dari dua middleware yang dijelaskan dalam tabel berikut.

Middleware API Versi .NET Deskripsi
Petakan Aset Statis MapStaticAssets .NET 9 atau yang lebih baru Mengoptimalkan pengiriman aset statis kepada klien.
File Statis UseStaticFiles Semua versi .NET Melayani aset statis kepada klien tanpa pengoptimalan MapStaticAssets tetapi berguna untuk beberapa tugas yang MapStaticAssets tidak mampu mengelola.

Konfigurasikan Middleware Aset Statis Peta dengan memanggil MapStaticAssets dalam alur pemrosesan permintaan aplikasi, yang melakukan hal berikut:

MapStaticAssets beroperasi dengan menggabungkan proses build dan publish untuk mengumpulkan informasi tentang aset statis di aplikasi. Informasi ini digunakan oleh pustaka runtime untuk melayani aset statis secara efisien ke browser.

MapStaticAssets dapat menggantikan UseStaticFiles dalam sebagian besar situasi. Namun, MapStaticAssets dioptimalkan untuk melayani aset dari lokasi yang diketahui di aplikasi pada waktu build dan penerbitan. Jika aplikasi melayani aset dari lokasi lain, seperti disk atau sumber daya yang disematkan, UseStaticFiles harus digunakan.

MapStaticAssets memberikan manfaat berikut yang tidak ditemukan dengan UseStaticFiles:

  • Kompresi build-time untuk semua aset di aplikasi: Gzip (Content-Encoding: gz) selama pengembangan dan Gzip dengan Brotli (Content-Encoding: br) selama penerbitan.
  • Berbasis ETags konten dihasilkan untuk setiap aset statis, yang merupakan string yang dikodekan Base64 dari hash SHA-256 dari aset statis. Ini memastikan bahwa browser hanya mengunduh ulang file jika kontennya telah berubah.

Middleware File Statis (UseStaticFiles) berguna dalam situasi berikut yang MapStaticAssets tidak dapat menangani:

Konfigurasikan Middleware File Statis untuk melayani aset statis kepada klien dengan memanggil UseStaticFiles dalam alur pemrosesan permintaan aplikasi. Untuk informasi selengkapnya, lihat File statis di ASP.NET Core.

Dalam rilis sebelum .NET 8, Blazor file statis kerangka kerja, seperti Blazor skrip, disajikan melalui Middleware File Statis. Di .NET 8 atau yang lebih baru, Blazor file statis kerangka kerja dipetakan menggunakan perutean titik akhir, dan Middleware File Statis tidak lagi digunakan.

Mode Proyek Aset Web Statis

Bagian ini berlaku untuk .Client proyek Blazor Aplikasi Web.

Pengaturan yang Blazor diperlukan <StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode> dalam .Client proyek Aplikasi Web mengembalikan Blazor WebAssembly perilaku aset statis kembali ke default, sehingga proyek berulah sebagai bagian dari proyek yang dihosting. Blazor WebAssembly SDK (Microsoft.NET.Sdk.BlazorWebAssembly) mengonfigurasi aset web statis dengan cara tertentu untuk bekerja dalam mode "mandiri" dengan server hanya menggunakan output dari pustaka. Ini tidak sesuai untuk Blazor Aplikasi Web, di mana bagian WebAssembly dari aplikasi adalah bagian logis dari host dan harus berulah lebih seperti pustaka. Misalnya, proyek tidak mengekspos bundel gaya (misalnya, BlazorSample.Client.styles.css) dan sebaliknya hanya menyediakan host dengan bundel proyek, sehingga host dapat menyertakannya dalam bundel gayanya sendiri.

Mengubah nilai (Default) <StaticWebAssetProjectMode> atau menghapus properti dari .Client proyek tidak didukung.

File statis di lingkungan non-Development

Bagian ini berlaku untuk file statis sisi server.

Saat menjalankan aplikasi secara lokal, aset web statis hanya diaktifkan secara default di Development lingkungan. Untuk mengaktifkan file statis untuk lingkungan selain Development selama pengembangan dan pengujian lokal (misalnya, Staging), panggil UseStaticWebAssets di WebApplicationBuilder dalam Program file.

Peringatan

Panggil UseStaticWebAssets lingkungan yang tepat untuk mencegah mengaktifkan fitur dalam produksi, karena melayani file dari lokasi terpisah pada disk selain dari proyek jika dipanggil di lingkungan produksi. Contoh di bagian ini memeriksa Staging lingkungan dengan memanggil IsStaging.

if (builder.Environment.IsStaging())
{
    builder.WebHost.UseStaticWebAssets();
}

Awalan untuk Blazor WebAssembly aset

Bagian ini berlaku untuk Blazor Web Apps.

WebAssemblyComponentsEndpointOptions.PathPrefix Gunakan opsi titik akhir untuk mengatur string jalur yang menunjukkan awalan untuk Blazor WebAssembly aset. Jalur harus sesuai dengan proyek aplikasi yang dirujuk Blazor WebAssembly .

endpoints.MapRazorComponents<App>()
    .AddInteractiveWebAssemblyRenderMode(options => 
        options.PathPrefix = "{PATH PREFIX}");

Dalam contoh sebelumnya, {PATH PREFIX} tempat penampung adalah awalan jalur dan harus dimulai dengan garis miring (/).

Dalam contoh berikut, awalan jalur diatur ke /path-prefix:

endpoints.MapRazorComponents<App>()
    .AddInteractiveWebAssemblyRenderMode(options => 
        options.PathPrefix = "/path-prefix");

Jalur dasar aset web statis

Bagian ini berlaku untuk aplikasi mandiri Blazor WebAssembly .

Secara default, menerbitkan aplikasi menempatkan aset statis aplikasi, termasuk Blazor file kerangka kerja (_framework aset folder), di jalur akar (/) dalam output yang diterbitkan. <StaticWebAssetBasePath> Properti yang ditentukan dalam file proyek (.csproj) mengatur jalur dasar ke jalur non-akar:

<PropertyGroup>
  <StaticWebAssetBasePath>{PATH}</StaticWebAssetBasePath>
</PropertyGroup>

Dalam contoh sebelumnya, {PATH} tempat penampung adalah jalurnya.

Tanpa mengatur <StaticWebAssetBasePath> properti, aplikasi mandiri diterbitkan di /BlazorStandaloneSample/bin/Release/{TFM}/publish/wwwroot/.

Dalam contoh sebelumnya, {TFM} tempat penampung adalah Target Framework Moniker (TFM) (misalnya, net6.0).

<StaticWebAssetBasePath> Jika properti dalam aplikasi mandiri Blazor WebAssembly mengatur jalur aset statis yang diterbitkan ke app1, jalur akar ke aplikasi dalam output yang diterbitkan adalah /app1.

Dalam file proyek aplikasi mandiri Blazor WebAssembly (.csproj):

<PropertyGroup>
  <StaticWebAssetBasePath>app1</StaticWebAssetBasePath>
</PropertyGroup>

Dalam output yang diterbitkan, jalur ke aplikasi mandiri Blazor WebAssembly adalah /BlazorStandaloneSample/bin/Release/{TFM}/publish/wwwroot/app1/.

Dalam contoh sebelumnya, {TFM} tempat penampung adalah Target Framework Moniker (TFM) (misalnya, net6.0).

Bagian ini berlaku untuk aplikasi mandiri Blazor WebAssembly dan solusi yang dihosting Blazor WebAssembly .

Secara default, menerbitkan aplikasi menempatkan aset statis aplikasi, termasuk Blazor file kerangka kerja (_framework aset folder), di jalur akar (/) dalam output yang diterbitkan. <StaticWebAssetBasePath> Properti yang ditentukan dalam file proyek (.csproj) mengatur jalur dasar ke jalur non-akar:

<PropertyGroup>
  <StaticWebAssetBasePath>{PATH}</StaticWebAssetBasePath>
</PropertyGroup>

Dalam contoh sebelumnya, {PATH} tempat penampung adalah jalurnya.

Tanpa mengatur <StaticWebAssetBasePath> properti, aplikasi klien solusi yang dihosting atau aplikasi mandiri diterbitkan di jalur berikut:

  • Server Dalam proyek solusi yang dihostingBlazor WebAssembly:/BlazorHostedSample/Server/bin/Release/{TFM}/publish/wwwroot/
  • Di aplikasi mandiri Blazor WebAssembly : /BlazorStandaloneSample/bin/Release/{TFM}/publish/wwwroot/

<StaticWebAssetBasePath> Jika properti dalam proyek aplikasi yang dihosting Blazor WebAssemblyClient atau di aplikasi mandiri Blazor WebAssembly mengatur jalur aset statis yang diterbitkan ke app1, jalur akar ke aplikasi dalam output yang diterbitkan adalah /app1.

Client Dalam file proyek aplikasi (.csproj) atau file proyek aplikasi mandiri Blazor WebAssembly (.csproj):

<PropertyGroup>
  <StaticWebAssetBasePath>app1</StaticWebAssetBasePath>
</PropertyGroup>

Dalam output yang diterbitkan:

  • Jalur ke aplikasi klien dalam proyek solusi yang dihosting ServerBlazor WebAssembly : /BlazorHostedSample/Server/bin/Release/{TFM}/publish/wwwroot/app1/
  • Jalur ke aplikasi mandiri Blazor WebAssembly : /BlazorStandaloneSample/bin/Release/{TFM}/publish/wwwroot/app1/

Properti <StaticWebAssetBasePath> ini paling umum digunakan untuk mengontrol jalur ke aset statis yang diterbitkan dari beberapa Blazor WebAssembly aplikasi dalam satu penyebaran yang dihosting. Untuk informasi selengkapnya, lihat Beberapa aplikasi ASP.NET Core Blazor WebAssembly yang dihosting. Properti ini juga efektif dalam aplikasi mandiri Blazor WebAssembly .

Dalam contoh sebelumnya, {TFM} tempat penampung adalah Target Framework Moniker (TFM) (misalnya, net6.0).

Pemetaan file dan opsi file statis

Bagian ini berlaku untuk file statis sisi server.

Untuk membuat pemetaan file tambahan dengan FileExtensionContentTypeProvider atau mengonfigurasi yang lain StaticFileOptions, gunakan salah satu pendekatan berikut. Dalam contoh berikut, {EXTENSION} tempat penampung adalah ekstensi file, dan {CONTENT TYPE} tempat penampung adalah jenis konten. Namespace untuk API berikut adalah Microsoft.AspNetCore.StaticFiles.

  • Konfigurasikan opsi melalui injeksi dependensi (DI) dalam Program file menggunakan StaticFileOptions:

    var provider = new FileExtensionContentTypeProvider();
    provider.Mappings["{EXTENSION}"] = "{CONTENT TYPE}";
    
    builder.Services.Configure<StaticFileOptions>(options =>
    {
        options.ContentTypeProvider = provider;
    });
    
    app.UseStaticFiles();
    
  • Teruskan StaticFileOptions langsung ke UseStaticFilesProgram dalam file:

    var provider = new FileExtensionContentTypeProvider();
    provider.Mappings["{EXTENSION}"] = "{CONTENT TYPE}";
    
    app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = provider });
    

Untuk membuat pemetaan file tambahan dengan FileExtensionContentTypeProvider atau mengonfigurasi yang lain StaticFileOptions, gunakan salah satu pendekatan berikut. Dalam contoh berikut, {EXTENSION} tempat penampung adalah ekstensi file, dan {CONTENT TYPE} tempat penampung adalah jenis konten.

  • Konfigurasikan opsi melalui injeksi dependensi (DI) dalam Program file menggunakan StaticFileOptions:

    using Microsoft.AspNetCore.StaticFiles;
    
    ...
    
    var provider = new FileExtensionContentTypeProvider();
    provider.Mappings["{EXTENSION}"] = "{CONTENT TYPE}";
    
    builder.Services.Configure<StaticFileOptions>(options =>
    {
        options.ContentTypeProvider = provider;
    });
    

    Pendekatan ini mengonfigurasi penyedia file yang sama yang digunakan untuk melayani Blazor skrip. Pastikan konfigurasi kustom Anda tidak mengganggu penyajian Blazor skrip. Misalnya, jangan hapus pemetaan untuk file JavaScript dengan mengonfigurasi penyedia dengan provider.Mappings.Remove(".js").

  • Gunakan dua panggilan ke UseStaticFilesProgram dalam file:

    • Konfigurasikan penyedia file kustom dalam panggilan pertama dengan StaticFileOptions.
    • Middleware kedua melayani Blazor skrip, yang menggunakan konfigurasi file statis default yang disediakan oleh Blazor kerangka kerja.
    using Microsoft.AspNetCore.StaticFiles;
    
    ...
    
    var provider = new FileExtensionContentTypeProvider();
    provider.Mappings["{EXTENSION}"] = "{CONTENT TYPE}";
    
    app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = provider });
    app.UseStaticFiles();
    
  • Anda dapat menghindari mengganggu penyajian _framework/blazor.server.js dengan menggunakan MapWhen untuk menjalankan Middleware File Statis kustom:

    app.MapWhen(ctx => !ctx.Request.Path
        .StartsWithSegments("/_framework/blazor.server.js"),
            subApp => subApp.UseStaticFiles(new StaticFileOptions() { ... }));
    

Sumber Daya Tambahan: