Bagikan melalui


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

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:

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:

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 .

  1. Ikuti panduan di tiga bagian pertama artikel ini:

  2. Pindahkan konten App komponen (App.razor) ke file komponen baru Routes (Routes.razor) yang ditambahkan ke folder akar proyek. Biarkan file kosong App.razor di aplikasi di folder akar proyek.

  3. Tambahkan entri ke _Imports.razor file untuk membuat mode render singkat tersedia untuk aplikasi:

    @using static Microsoft.AspNetCore.Components.Web.RenderMode
    
  4. Pindahkan konten di _Host halaman (Pages/_Host.cshtml) ke file kosong App.razor . Lanjutkan untuk membuat perubahan berikut pada App 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 (~) dari href <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 dengan Routes 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 menjadi blazor.web.js:

    - <script src="_framework/blazor.server.js"></script>
    + <script src="_framework/blazor.web.js"></script>
    
  5. Hapus file Pages/_Host.cshtml.

  6. 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, ke app.UseAuthentication dan app.UseAuthorization. Tidak perlu secara eksplisit menambahkan layanan antiforgery (builder.Services.AddAntiforgery), karena ditambahkan secara otomatis oleh AddRazorComponents, yang dicakup sebelumnya.

  7. 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 @rendermodeRazor untuk HeadOutlet komponen dan Routes .

    Ubah nilai atribut direktif @rendermode untuk HeadOutlet komponen dan Routes 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:

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 .

  1. Ikuti panduan di tiga bagian pertama artikel ini:

    Penting

    Menggunakan panduan sebelumnya, perbarui .Clientproyek solusi , .Server, dan .Shared .

  2. .Client Dalam file proyek (.csproj), tambahkan properti MSBuild berikut:

    <NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
    <StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
    

    Juga dalam .Client file proyek, hapus Microsoft.AspNetCore.Components.WebAssembly.DevServer referensi paket:

    - <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer"... />
    
  3. Pindahkan konten file dari file ke .Client/wwwroot/index.html file komponen baru App (App.razor) yang dibuat di akar .Server proyek. Setelah Anda memindahkan konten file, hapus index.html file.

    Ganti nama App.razor dalam proyek menjadi .Client Routes.razor.

    Di Routes.razor, perbarui nilai atribut ke AppAssembly typeof(Program).Assembly.

  4. .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.

  5. 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> dengan Routes komponen menggunakan mode render Interactive WebAssembly (pra-penyajian dinonaktifkan):

    <Routes @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />
    

    blazor.webassembly.js Perbarui skrip ke blazor.web.js:

    - <script src="_framework/blazor.webassembly.js"></script>
    + <script src="_framework/blazor.web.js"></script>
    
  6. .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.

  7. Hapus baris berikut dari .Client/Program.cs:

    - builder.RootComponents.Add<App>("#app");
    - builder.RootComponents.Add<HeadOutlet>("head::after");
    
  8. 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 ke app.UseAntiforgery harus dilakukan setelah panggilan, jika ada, ke app.UseAuthentication dan app.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).

  9. 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 dengan CascadingValue komponen dan buat Routes komponen dirender secara interaktif. Misalnya, lihat CascadingValue 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:

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 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.jssecara 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] atau RequireAuthorization.

  • Tambahkan [AllowAnonymous] ke /_framework/blazor.server.js titik akhir dalam Program file:

    app.MapBlazorHub().Add(endpointBuilder =>
    {
        if (endpointBuilder is 
            RouteEndpointBuilder
            { 
                RoutePattern: { RawText: "/_framework/blazor.server.js" }
            })
        {
            endpointBuilder.Metadata.Add(new AllowAnonymousAttribute());
        }
    });
    
  • Daftarkan kustom AuthorizationHandler yang memeriksa HttpContext 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:

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.