Migrasi dari ASP.NET Core di .NET 7 ke .NET 8
Artikel ini menjelaskan cara memperbarui proyek ASP.NET Core 7.0 yang ada ke ASP.NET Core 8.0.
Prasyarat
Visual Studio 2022 dengan beban kerja ASP.NET serta pengembangan web.
Memperbarui versi .NET SDK di global.json
Jika Anda mengandalkan global.json
file untuk menargetkan versi .NET Core SDK tertentu, perbarui version
properti ke versi .NET 8.0 SDK yang diinstal. Contohnya:
{
"sdk": {
- "version": "7.0.100"
+ "version": "8.0.100"
}
}
Memperbarui kerangka kerja target
Perbarui Moniker Kerangka Kerja Target (TFM) file proyek menjadi net8.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>net7.0</TargetFramework>
+ <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
</Project>
Memperbarui referensi paket
Dalam file proyek, perbarui setiap Microsoft.AspNetCore.*
atribut referensi Version
paket , Microsoft.EntityFrameworkCore.*
, Microsoft.Extensions.*
, dan System.Net.Http.Json
ke 8.00 atau yang lebih baru. Contohnya:
<ItemGroup>
- <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="7.0.12" />
- <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.12" />
- <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="7.0.0" />
- <PackageReference Include="System.Net.Http.Json" Version="7.0.1" />
+ <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="8.0.0" />
+ <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.0" />
+ <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="8.0.0" />
+ <PackageReference Include="System.Net.Http.Json" Version="8.0.0" />
</ItemGroup>
Blazor
Skenario migrasi berikut tercakup:
- Blazor Server Memperbarui aplikasi
- Mengadopsi semua Blazor Web App konvensi
- Blazor Server Mengonversi aplikasi menjadiBlazor Web App
- Blazor WebAssembly Memperbarui aplikasi
- Mengonversi aplikasi yang dihosting Blazor WebAssembly menjadi Blazor Web App
- Memperbarui konfigurasi opsi layanan dan titik akhir
- Hilangkan Blazor Server dengan solusi perutean Yarp
- Memigrasikan
CascadingValue
komponen dalam komponen tata letak - Memigrasikan
BlazorEnableCompression
properti MSBuild - Memigrasikan
<CascadingAuthenticationState>
komponen ke layanan status autentikasi bertingkat - Artikel baru: Masalah penembolokan HTTP selama migrasi
- Artikel baru: Artikel baru tentang pustaka kelas dengan penyajian sisi server statis (SSR statis)
- Menemukan komponen dari rakitan tambahan
- Hilangkan
[Parameter]
atribut saat parameter disediakan dari string kueri - Blazor Server otorisasi kebijakan fallback skrip
Untuk panduan tentang menambahkan Blazor dukungan ke aplikasi ASP.NET Core, lihat Mengintegrasikan komponen ASP.NET Core Razor ke dalam aplikasi ASP.NET Core.
Blazor Server Memperbarui aplikasi
Sebaiknya gunakan Blazor Web Apps di .NET 8, tetapi Blazor Server didukung. Untuk terus menggunakan Blazor Server dengan .NET 8, ikuti panduan di tiga bagian pertama artikel ini:
- Memperbarui versi .NET SDK di
global.json
- Memperbarui kerangka kerja target
- Memperbarui referensi paket
Fitur baru Blazor yang Blazor Web Appdiperkenalkan untuk tidak tersedia untuk aplikasi yang Blazor Server diperbarui untuk dijalankan di bawah .NET 8. Jika Anda ingin mengadopsi fitur .NET 8 Blazor baru, ikuti panduan di salah satu bagian berikut:
Mengadopsi semua Blazor Web App konvensi
Untuk mengadopsi semua konvensi baru Blazor Web App secara opsional, kami merekomendasikan proses berikut:
- Buat aplikasi baru dari Blazor Web App templat proyek. Untuk informasi selengkapnya, lihat Alat untuk ASP.NET Core Blazor.
- Pindahkan komponen dan kode aplikasi Anda ke yang baru Blazor Web App, yang membuat modifikasi untuk mengadopsi fitur baru.
- Perbarui tata letak dan gaya Blazor Web App.
Fitur .NET 8 baru tercakup dalam Apa yang baru di ASP.NET Core 8.0. Saat memperbarui aplikasi dari .NET 6 atau yang lebih lama, lihat catatan migrasi dan rilis (Artikel apa yang baru ) untuk mengintervensi rilis.
Blazor Server Mengonversi aplikasi menjadiBlazor Web App
Blazor Server aplikasi didukung di .NET 8 tanpa perubahan kode apa pun. Gunakan panduan berikut untuk mengonversi Blazor Server aplikasi menjadi .NET 8 Blazor Web Appyang setara, yang membuat semua fitur .NET 8 baru tersedia.
Penting
Bagian ini berfokus pada perubahan minimal yang diperlukan untuk mengonversi aplikasi .NET 7 Blazor Server menjadi .NET 8 Blazor Web App. Untuk mengadopsi semua konvensi baru Blazor Web App , ikuti panduan di bagian Adopsi semua Blazor Web App konvensi .
Ikuti panduan di tiga bagian pertama artikel ini:
Pindahkan konten
App
komponen (App.razor
) ke file komponen baruRoutes
(Routes.razor
) yang ditambahkan ke folder akar proyek. Biarkan file kosongApp.razor
di aplikasi di folder akar proyek.Tambahkan entri ke
_Imports.razor
file untuk membuat mode render singkat tersedia untuk aplikasi:@using static Microsoft.AspNetCore.Components.Web.RenderMode
Pindahkan konten di
_Host
halaman (Pages/_Host.cshtml
) ke file kosongApp.razor
. Lanjutkan untuk membuat perubahan berikut padaApp
komponen.Catatan
Dalam contoh berikut, namespace proyek adalah
BlazorServerApp
. Sesuaikan namespace agar sesuai dengan proyek Anda.Hapus baris berikut dari bagian atas file:
- @page "/" - @using Microsoft.AspNetCore.Components.Web - @namespace BlazorServerApp.Pages - @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Ganti baris sebelumnya dengan baris yang menyuntikkan IHostEnvironment instans:
@inject IHostEnvironment Env
Hapus tilde (
~
) darihref
<base>
tag dan ganti dengan jalur dasar untuk aplikasi Anda:- <base href="~/" /> + <base href="/" />
Hapus Pembantu Tag Komponen untuk HeadOutlet komponen dan ganti dengan HeadOutlet komponen.
Hapus baris berikut:
- <component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />
Ganti baris sebelumnya dengan yang berikut ini:
<HeadOutlet @rendermode="InteractiveServer" />
Hapus Pembantu Tag Komponen untuk
App
komponen dan ganti denganRoutes
komponen.Hapus baris berikut:
- <component type="typeof(App)" render-mode="ServerPrerendered" />
Ganti baris sebelumnya dengan yang berikut ini:
<Routes @rendermode="InteractiveServer" />
Catatan
Konfigurasi sebelumnya mengasumsikan bahwa komponen aplikasi mengadopsi penyajian server interaktif. Untuk informasi selengkapnya, termasuk cara mengadopsi penyajian sisi server statis (SSR), lihat mode render ASP.NET CoreBlazor.
Hapus Bantuan Tag Lingkungan untuk antarmuka pengguna kesalahan dan ganti dengan markup berikut Razor .
Hapus baris berikut:
- <environment include="Staging,Production"> - An error has occurred. This application may no longer respond until reloaded. - </environment> - <environment include="Development"> - An unhandled exception has occurred. See browser dev tools for details. - </environment>
Ganti baris sebelumnya dengan yang berikut ini:
@if (Env.IsDevelopment()) { <text> An unhandled exception has occurred. See browser dev tools for details. </text> } else { <text> An error has occurred. This app may no longer respond until reloaded. </text> }
Blazor Ubah skrip dari
blazor.server.js
menjadiblazor.web.js
:- <script src="_framework/blazor.server.js"></script> + <script src="_framework/blazor.web.js"></script>
Hapus file
Pages/_Host.cshtml
.Perbarui
Program.cs
:Catatan
Dalam contoh berikut, namespace proyek adalah
BlazorServerApp
. Sesuaikan namespace agar sesuai dengan proyek Anda.using
Tambahkan pernyataan ke bagian atas file untuk namespace layanan proyek:using BlazorServerApp;
Ganti AddServerSideBlazor dengan AddRazorComponents dan panggilan berantai ke AddInteractiveServerComponents.
Hapus baris berikut:
- builder.Services.AddServerSideBlazor();
Ganti baris sebelumnya dengan Razor komponen dan layanan komponen server interaktif. Panggilan AddRazorComponents menambahkan layanan antiforgery (AddAntiforgery) secara default.
builder.Services.AddRazorComponents() .AddInteractiveServerComponents();
Hapus baris berikut:
- app.MapBlazorHub();
Ganti baris sebelumnya dengan panggilan ke MapRazorComponents, menyediakan
App
komponen sebagai jenis komponen akar, dan tambahkan panggilan berantai ke AddInteractiveServerRenderMode:app.MapRazorComponents<App>() .AddInteractiveServerRenderMode();
Hapus baris berikut:
- app.MapFallbackToPage("/_Host");
Hapus Middleware Perutean:
- app.UseRouting();
Tambahkan Middleware Antiforgery ke alur pemrosesan permintaan setelah baris yang menambahkan Middleware Pengalihan HTTPS (
app.UseHttpsRedirection
):app.UseAntiforgery();
Panggilan sebelumnya harus
app.UseAntiforgery
dilakukan setelah panggilan, jika ada, keapp.UseAuthentication
danapp.UseAuthorization
. Tidak perlu secara eksplisit menambahkan layanan antiforgery (builder.Services.AddAntiforgery
), karena ditambahkan secara otomatis oleh AddRazorComponents, yang dicakup sebelumnya.Blazor Server Jika aplikasi dikonfigurasi untuk menonaktifkan pra-penyajian, Anda dapat terus menonaktifkan pra-penyajian untuk aplikasi yang diperbarui.
App
Dalam komponen, ubah nilai yang ditetapkan ke atribut direktif@rendermode
Razor untuk HeadOutlet komponen danRoutes
.Ubah nilai atribut direktif
@rendermode
untuk HeadOutlet komponen danRoutes
untuk menonaktifkan pra-penyajian:- @rendermode="InteractiveServer" + @rendermode="new InteractiveServerRenderMode(prerender: false)"
Untuk informasi selengkapnya, lihat mode render ASP.NET CoreBlazor.
Blazor WebAssembly Memperbarui aplikasi
Ikuti panduan di tiga bagian pertama artikel ini:
- Memperbarui versi .NET SDK di
global.json
- Memperbarui kerangka kerja target
- Memperbarui referensi paket
Untuk aplikasi yang mengadopsi pemuatan rakitan malas, ubah ekstensi file dari .dll
ke .wasm
dalam implementasi aplikasi untuk mencerminkan Blazor WebAssemblyadopsi kemasan rakitan Webcil.
Sebelum rilis .NET 8, panduan dalam tata letak Penyebaran untuk aplikasi yang dihosting Blazor WebAssembly ASP.NET Core membahas lingkungan yang memblokir klien agar tidak mengunduh dan menjalankan DLL dengan pendekatan bundling multipart. Di .NET 8 atau yang lebih baru, Blazor menggunakan format file Webcil untuk mengatasi masalah ini. Bundling multipihak menggunakan paket NuGet eksperimental yang dijelaskan oleh artikel tata letak penyebaran WebAssembly tidak didukung untuk Blazor aplikasi di .NET 8 atau yang lebih baru. Jika Anda ingin terus menggunakan paket bundel multibagian di aplikasi .NET 8 atau yang lebih baru, Anda dapat menggunakan panduan dalam artikel untuk membuat paket NuGet bundling multibagian Anda sendiri, tetapi tidak akan didukung oleh Microsoft.
Mengonversi aplikasi yang dihosting Blazor WebAssembly menjadi Blazor Web App
Blazor WebAssembly aplikasi didukung di .NET 8 tanpa perubahan kode apa pun. Gunakan panduan berikut untuk mengonversi aplikasi yang dihosting Blazor WebAssembly ASP.NET Core menjadi .NET 8 Blazor Web Appyang setara, yang membuat semua fitur .NET 8 baru tersedia.
Penting
Bagian ini berfokus pada perubahan minimal yang diperlukan untuk mengonversi aplikasi yang dihosting Blazor WebAssembly .NET 7 ASP.NET Core menjadi .NET 8 Blazor Web App. Untuk mengadopsi semua konvensi baru Blazor Web App , ikuti panduan di bagian Adopsi semua Blazor Web App konvensi .
Ikuti panduan di tiga bagian pertama artikel ini:
- Memperbarui versi .NET SDK di
global.json
- Memperbarui kerangka kerja target
- Memperbarui referensi paket
Penting
Menggunakan panduan sebelumnya, perbarui
.Client
proyek solusi ,.Server
, dan.Shared
.- Memperbarui versi .NET SDK di
.Client
Dalam file proyek (.csproj
), tambahkan properti MSBuild berikut:<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile> <StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
Juga dalam
.Client
file proyek, hapusMicrosoft.AspNetCore.Components.WebAssembly.DevServer
referensi paket:- <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer"... />
Pindahkan konten file dari file ke
.Client/wwwroot/index.html
file komponen baruApp
(App.razor
) yang dibuat di akar.Server
proyek. Setelah Anda memindahkan konten file, hapusindex.html
file.Ganti nama
App.razor
dalam proyek menjadi.Client
Routes.razor
.Di
Routes.razor
, perbarui nilai atribut keAppAssembly
typeof(Program).Assembly
..Client
Dalam proyek, tambahkan entri ke_Imports.razor
file untuk membuat mode render singkat tersedia untuk aplikasi:@using static Microsoft.AspNetCore.Components.Web.RenderMode
Buat salinan
.Client
file proyek_Imports.razor
dan tambahkan ke.Server
proyek.Buat perubahan berikut pada
App.razor
file:Ganti judul situs web default situs web (
<title>...</title>
) dengan HeadOutlet komponen. Perhatikan judul situs web untuk digunakan nanti dan hapus tag judul dan judul:- <title>...</title>
Tempat Anda menghapus judul, tempatkan komponen yang HeadOutlet menetapkan mode render Interactive WebAssembly (pra-penyajian dinonaktifkan):
<HeadOutlet @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />
Ubah bundel gaya CSS:
- <link href="{CLIENT PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet"> + <link href="{SERVER PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet">
Tempat penampung dalam kode sebelumnya:
{CLIENT PROJECT ASSEMBLY NAME}
: Nama rakitan proyek klien. Contoh:BlazorSample.Client
{SERVER PROJECT ASSEMBLY NAME}
: Nama rakitan proyek server. Contoh:BlazorSample.Server
Temukan markup HTML berikut
<div>...</div>
:- <div id="app"> - ... - </div>
Ganti markup HTML sebelumnya
<div>...</div>
denganRoutes
komponen menggunakan mode render Interactive WebAssembly (pra-penyajian dinonaktifkan):<Routes @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />
blazor.webassembly.js
Perbarui skrip keblazor.web.js
:- <script src="_framework/blazor.webassembly.js"></script> + <script src="_framework/blazor.web.js"></script>
.Client
Buka file tata letak proyek (.Client/Shared/MainLayout.razor
) dan tambahkan PageTitle komponen dengan judul default situs web ({TITLE}
tempat penampung):<PageTitle>{TITLE}</PageTitle>
Catatan
File tata letak lainnya juga harus menerima PageTitle komponen dengan judul situs web default.
Untuk informasi selengkapnya, lihat Mengontrol konten head di aplikasi ASP.NET CoreBlazor.
Hapus baris berikut dari
.Client/Program.cs
:- builder.RootComponents.Add<App>("#app"); - builder.RootComponents.Add<HeadOutlet>("head::after");
Perbarui
.Server/Program.cs
:Tambahkan Razor komponen dan layanan komponen WebAssembly interaktif ke proyek. Hubungi AddRazorComponents dengan panggilan berantai ke AddInteractiveWebAssemblyComponents. Panggilan AddRazorComponents menambahkan layanan antiforgery (AddAntiforgery) secara default.
builder.Services.AddRazorComponents() .AddInteractiveWebAssemblyComponents();
Tambahkan Middleware Antiforgery ke alur pemrosesan permintaan.
Tempatkan baris berikut setelah panggilan ke
app.UseHttpsRedirection
. Panggilan keapp.UseAntiforgery
harus dilakukan setelah panggilan, jika ada, keapp.UseAuthentication
danapp.UseAuthorization
. Tidak perlu secara eksplisit menambahkan layanan antiforgery (builder.Services.AddAntiforgery
), karena ditambahkan secara otomatis oleh AddRazorComponents, yang dicakup sebelumnya.app.UseAntiforgery();
Hapus baris berikut:
- app.UseBlazorFrameworkFiles();
Hapus baris berikut:
- app.MapFallbackToFile("index.html");
Ganti baris sebelumnya dengan panggilan ke MapRazorComponents, menyediakan
App
komponen sebagai jenis komponen akar, dan tambahkan panggilan berantai ke AddInteractiveWebAssemblyRenderMode dan AddAdditionalAssemblies:app.MapRazorComponents<App>() .AddInteractiveWebAssemblyRenderMode() .AddAdditionalAssemblies(typeof({CLIENT APP NAMESPACE}._Imports).Assembly);
Dalam contoh sebelumnya,
{CLIENT APP NAMESPACE}
tempat penampung adalah namespace.Client
proyek (misalnya,HostedBlazorApp.Client
).Jalankan solusi dari
.Server
proyek:Untuk Visual Studio, konfirmasikan bahwa
.Server
proyek dipilih di Penjelajah Solusi saat menjalankan aplikasi.Jika menggunakan .NET CLI, jalankan proyek dari
.Server
folder proyek.
Memperbarui konfigurasi opsi layanan dan titik akhir
Dengan rilis Blazor Web Appdi .NET 8, Blazor konfigurasi opsi layanan dan titik akhir diperbarui dengan pengenalan API baru untuk layanan komponen interaktif dan konfigurasi titik akhir komponen.
Panduan konfigurasi yang diperbarui muncul di lokasi berikut:
- Mengatur dan membaca lingkungan aplikasi: Berisi panduan yang diperbarui, terutama di bagian berjudul Membaca sisi klien lingkungan dalam Blazor Web App.
- Opsi penanganan sirkuit sisi server: Mencakup konfigurasi opsi sirkuit dan hub baruBlazorSignalR.
- Merender Razor komponen dari JavaScript: Mencakup pendaftaran komponen dinamis dengan RegisterForJavaScript.
- Blazor elemen kustom: Blazor Web App pendaftaran: Mencakup pendaftaran elemen kustom komponen akar dengan
RegisterCustomElement
. - Awalan untuk Blazor WebAssembly aset: Mencakup kontrol string jalur yang menunjukkan awalan untuk Blazor WebAssembly aset.
- Durasi validitas URL pengalihan sementara: Mencakup kontrol masa pakai validitas perlindungan data untuk URL pengalihan sementara yang dipancarkan oleh Blazor penyajian sisi server.
- Kesalahan terperinci: Mencakup pengaktifan kesalahan terperinci untuk Razor penyajian sisi server komponen.
- Konfigurasi pra-penyajian: Pra-penyajian diaktifkan secara default untuk Blazor Web Apps. Ikuti tautan ini untuk panduan tentang cara menonaktifkan pra-penyajian jika Anda memiliki keadaan khusus yang mengharuskan aplikasi menonaktifkan pra-penyajian.
- Opsi pengikatan formulir: Mencakup konfigurasi opsi pengikatan formulir.
Hilangkan Blazor Server dengan solusi perutean Yarp
Jika sebelumnya Anda mengikuti panduan di Mengaktifkan dukungan ASP.NET Core Blazor Server dengan Yarp dalam migrasi bertahap untuk memigrasikan Blazor Server aplikasi dengan Yarp ke .NET 6 atau .NET 7, Anda dapat membalikkan langkah-langkah solusi yang Anda ambil saat mengikuti panduan artikel. Perutean dan penautan mendalam untuk Blazor Server dengan Yarp berfungsi dengan benar di .NET 8.
Memigrasikan CascadingValue
komponen dalam komponen tata letak
Parameter berskala tidak meneruskan data di seluruh batas mode render, dan tata letak dirender secara statis di aplikasi interaktif lainnya. Oleh karena itu, aplikasi yang berusaha menggunakan parameter berskala dalam komponen yang dirender secara interaktif tidak akan dapat mengapit nilai dari tata letak.
Dua pendekatan untuk migrasi adalah:
- (Disarankan) Berikan status sebagai nilai berskala tingkat akar. Untuk informasi selengkapnya, lihat Nilai berskala tingkat akar.
- Bungkus router dalam
Routes
komponen denganCascadingValue
komponen dan buatRoutes
komponen dirender secara interaktif. Misalnya, lihatCascadingValue
komponen.
Untuk informasi selengkapnya, lihat Nilai/parameter berskala dan batas mode render.
Memigrasikan BlazorEnableCompression
properti MSBuild
Untuk Blazor WebAssembly aplikasi yang menonaktifkan kompresi dan target .NET 7 atau yang lebih lama tetapi dibangun dengan .NET 8 SDK, BlazorEnableCompression
properti MSBuild telah berubah menjadi CompressionEnabled
:
<PropertyGroup>
- <BlazorEnableCompression>false</BlazorEnableCompression>
+ <CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>
Saat menggunakan perintah terbitkan .NET CLI, gunakan properti baru:
dotnet publish -p:CompressionEnabled=false
Untuk informasi selengkapnya, lihat sumber daya berikut:
- Perubahan Pemutusan Bendera Kompresi Aset Web Statis (dotnet/pengumuman #283)
- Menghosting dan menyebarkan ASP.NET Core Blazor WebAssembly
Memigrasikan <CascadingAuthenticationState>
komponen ke layanan status autentikasi bertingkat
Di .NET 7 atau yang lebih lama, CascadingAuthenticationState komponen dibungkus di sekitar beberapa bagian pohon UI, misalnya di sekitar Blazor router, untuk memberikan status autentikasi berkasar:
<CascadingAuthenticationState>
<Router ...>
...
</Router>
</CascadingAuthenticationState>
Di .NET 8, jangan gunakan CascadingAuthenticationState komponen:
- <CascadingAuthenticationState>
<Router ...>
...
</Router>
- </CascadingAuthenticationState>
Sebagai gantinya, tambahkan layanan status autentikasi berkala ke kumpulan layanan dengan memanggil AddCascadingAuthenticationState dalam Program
file:
builder.Services.AddCascadingAuthenticationState();
Untuk informasi selengkapnya, lihat sumber daya berikut:
- artikel autentikasi dan otorisasi ASP.NET Core Blazor
- Mengamankan aplikasi sisi Blazor server ASP.NET Core
Artikel baru tentang masalah penembolokan HTTP
Kami telah menambahkan artikel baru yang membahas beberapa masalah penembolokan HTTP umum yang dapat terjadi saat meningkatkan Blazor aplikasi di seluruh versi utama dan cara mengatasi masalah penembolokan HTTP.
Untuk informasi selengkapnya, lihat Menghindari masalah penembolokan HTTP saat meningkatkan aplikasi ASP.NET CoreBlazor.
Artikel baru tentang pustaka kelas dengan penyajian sisi server statis (SSR statis)
Kami telah menambahkan artikel baru yang membahas kewenangan pustaka komponen di Razor pustaka kelas (RCL) dengan penyajian sisi server statis (SSR statis).
Untuk informasi selengkapnya, lihat pustaka kelas ASP.NET Core Razor (RCL) dengan penyajian sisi server statis (SSR statis).
Menemukan komponen dari rakitan tambahan
Saat bermigrasi dari Blazor Server aplikasi ke Blazor Web App, akses panduan dalam perutean dan navigasi inti Blazor ASP.NET jika aplikasi menggunakan komponen yang dapat dirutekan dari rakitan tambahan, seperti pustaka kelas komponen.
Hilangkan [Parameter]
atribut saat parameter disediakan dari string kueri
Atribut [Parameter]
tidak lagi diperlukan saat menyediakan parameter dari string kueri:
- [Parameter]
[SupplyParameterFromQuery]
Blazor Server otorisasi kebijakan fallback skrip
Di .NET 7, Blazor Server skrip (blazor.server.js
) dilayani oleh Middleware File Statis. Menempatkan panggilan untuk Middleware File Statis (UseStaticFiles) dalam alur pemrosesan permintaan sebelum panggilan ke Middleware Otorisasi (UseAuthorization) cukup di aplikasi .NET 7 untuk melayani Blazor skrip kepada pengguna anonim.
Di .NET 8, Blazor Server skrip dilayani oleh titik akhirnya sendiri, menggunakan perutean titik akhir. Perubahan ini diperkenalkan oleh bug Tetap - Meneruskan opsi ke pemutusan Blazor Server UseStaticFiles (dotnet/aspnetcore
#45897).
Pertimbangkan skenario multi-penyewa di mana:
- Kebijakan default dan fallback diatur secara identik.
- Penyewa diselesaikan menggunakan segmen pertama di jalur permintaan (misalnya,
tld.com/tenant-name/...
). - Permintaan ke titik akhir penyewa diautentikasi oleh skema autentikasi tambahan, yang menambahkan tambahan identity ke perwakilan permintaan.
- Kebijakan otorisasi fallback memiliki persyaratan yang memeriksa klaim melalui tambahan identity.
Permintaan untuk Blazor file skrip (blazor.server.js
) dilayani di , yang dikodekan /_framework/blazor.server.js
secara permanen dalam kerangka kerja. Permintaan untuk file tidak diautentikasi oleh skema autentikasi tambahan untuk penyewa tetapi masih ditantang oleh kebijakan fallback, yang menghasilkan hasil yang tidak sah.
Masalah ini sedang dievaluasi untuk fitur kerangka kerja baru di MapRazorComponents yang rusak dengan FallbackPolicy RequireAuthenticatedUser (dotnet/aspnetcore
51836), yang saat ini dijadwalkan untuk rilis .NET 9 pada bulan November 2024. Hingga saat itu, Anda dapat mengatasi masalah ini menggunakan salah satu dari tiga pendekatan berikut:
Jangan gunakan kebijakan fallback. Terapkan
[Authorize]
atribut dalam_Imports.razor
file untuk menerapkannya ke semua komponen aplikasi. Untuk non-titikblazor akhir, secara eksplisit menggunakan[Authorize]
atauRequireAuthorization
.Tambahkan
[AllowAnonymous]
ke/_framework/blazor.server.js
titik akhir dalamProgram
file:app.MapBlazorHub().Add(endpointBuilder => { if (endpointBuilder is RouteEndpointBuilder { RoutePattern: { RawText: "/_framework/blazor.server.js" } }) { endpointBuilder.Metadata.Add(new AllowAnonymousAttribute()); } });
Daftarkan kustom
AuthorizationHandler
yang memeriksaHttpContext
untuk mengizinkan/_framework/blazor.server.js
file melalui.
Docker
Memperbarui gambar Docker
Untuk aplikasi yang menggunakan Docker, perbarui pernyataan dan skrip DockerfileFROM
. Gunakan gambar dasar yang menyertakan runtime ASP.NET Core 8.0. Pertimbangkan perbedaan perintah berikut docker pull
antara ASP.NET Core 7.0 dan 8.0:
- docker pull mcr.microsoft.com/dotnet/aspnet:7.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:8.0
Memperbarui port Docker
Port default ASP.NET Core yang dikonfigurasi dalam gambar kontainer .NET telah diperbarui dari port 80 ke 8080.
Variabel lingkungan baru ASPNETCORE_HTTP_PORTS
ditambahkan sebagai alternatif yang lebih sederhana untuk ASPNETCORE_URLS
.
Untuk informasi selengkapnya, lihat:
- Port default ASP.NET Core berubah dari 80 menjadi 8080.
- Tentukan port saja dengan
ASPNETCORE_HTTP_PORTS
Tinjau perubahan yang melanggar
Untuk memecahkan perubahan dari .NET Core .NET 7.0 menjadi 8.0, lihat Melanggar perubahan di .NET 8, yang mencakup bagian inti ASP.NET dan Core Kerangka Kerja Entitas.
ASP.NET Core