Migrasi dari ASP.NET Core 3.1 ke 5.0
Artikel ini menjelaskan cara memperbarui proyek ASP.NET Core 3.1 yang ada ke ASP.NET Core 5.0. Untuk petunjuk tentang cara bermigrasi dari ASP.NET Core 3.1 ke ASP.NET Core 6.0, lihat Migrasi dari ASP.NET Core 3.1 ke 6.0.
Prasyarat
- Visual Studio 2019 16.8 atau versi terbaru dengan beban kerja ASP.NET dan pengembangan web
- .NET 5.0 SDK
Memperbarui versi .NET Core SDK di global.json
Jika Anda mengandalkan global.json file untuk menargetkan versi .NET Core SDK tertentu, perbarui version
properti ke versi .NET 5.0 SDK yang diinstal. Contohnya:
{
"sdk": {
- "version": "3.1.200"
+ "version": "5.0.100"
}
}
Memperbarui kerangka kerja target
Jika memperbarui Blazor WebAssembly proyek, lewati ke bagian Perbarui Blazor WebAssembly proyek . Untuk jenis proyek ASP.NET Core lainnya, perbarui Target Framework Moniker (TFM) file proyek menjadi net5.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
Hapus bin
dan obj
folder
Anda mungkin perlu menghapus bin
folder dan obj
. Jalankan dotnet nuget locals --clear all
untuk menghapus cache paket NuGet.
Blazor Perubahan pada logika perutean aplikasi di 5.0.1 dan rilis 5.x lebih lanjut hingga 6.0
Komputasi prioritas rute berubah dalam rilis patch ASP.NET Core 5.0.1. Ini dapat memengaruhi Anda jika Anda telah menentukan rute atau rute catch-all dengan parameter opsional.
Perilaku yang lama
Dengan perilaku sebelumnya di ASP.NET Core 5.0.0 atau yang lebih lama, rute dengan prioritas yang lebih rendah, seperti {*slug}
, dicocokkan sebelum rute dengan prioritas yang lebih tinggi, seperti /customer/{id}
.
Perilaku yang baru
Perilaku baru di ASP.NET Core 5.0.1 atau yang lebih baru lebih cocok dengan perilaku perutean yang ditentukan dalam aplikasi ASP.NET Core, di mana kerangka kerja menghitung dan menetapkan prioritas rute untuk setiap segmen terlebih dahulu dan hanya menggunakan panjang rute untuk memutuskan ikatan sebagai kriteria sekunder.
Alasan untuk berubah
Perilaku asli dianggap sebagai bug dalam implementasi karena tujuan kami adalah agar Blazor sistem perutean berperilaku dengan cara yang sama seperti sistem perutean ASP.NET Core untuk subset fitur yang didukung oleh Blazor perutean.
Tindakan yang direkomendasikan
PreferExactMatches
Tambahkan atribut ke Router
komponen dalam App.razor
file untuk memilih perilaku yang benar:
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
Ketika PreferExactMatches
diatur ke @true
, pencocokan rute lebih memilih kecocokan yang tepat daripada kartubebas.
Penting
Semua aplikasi harus secara eksplisit diatur PreferExactMatches
ke @true
.
Kemampuan untuk mengatur PreferExactMatches
@false
ke atau membiarkannya tidak diatur hanya disediakan untuk kompatibilitas mundur.
Ketika .NET 6 dirilis, router akan selalu lebih memilih kecocokan yang tepat, dan PreferExactMatches
opsi tidak akan tersedia.
Pembaruan Blazor WebAssembly dan Blazor Server proyek
Panduan di bagian ini berlaku untuk kedua Blazor model hosting. Bagian yang mengikuti bagian ini memberikan panduan tambahan khusus untuk menghosting model dan jenis aplikasi. Terapkan panduan dari semua bagian yang relevan ke aplikasi Anda.
Blazor WebAssembly Di
wwwroot/index.html
aplikasi atauPages/_Host.cshtml
Blazor Server aplikasi, tambahkan<link>
elemen ke<head>
elemen untuk gaya. Dalam nilai atribut elemenhref
berikut<link>
, tempat penampung{ASSEMBLY NAME}
adalah nama rakitan aplikasi.+<link href="{ASSEMBLY NAME}.styles.css" rel="stylesheet" />
Blazor WebAssembly Mandiri atau Blazor Server contoh:
+<link href="BlazorSample.styles.css" rel="stylesheet" />
Client
proyek contoh solusi yang dihosting Blazor WebAssembly :+<link href="BlazorSample.Client.styles.css" rel="stylesheet" />
Sertakan namespace baru dalam file aplikasi
_Imports.razor
untuk virtualisasi komponen, Microsoft.AspNetCore.Components.Web.Virtualization. File berikut_Imports.razor
menunjukkan namespace default dalam aplikasi yang dihasilkan dari Blazor templat proyek. Tempat penampung{ASSEMBLY NAME}
adalah nama rakitan aplikasi.Blazor WebAssembly (
_Imports.razor
):@using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using {ASSEMBLY NAME} @using {ASSEMBLY NAME}.Shared
Blazor Server (
_Imports.razor
):@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using {ASSEMBLY NAME} @using {ASSEMBLY NAME}.Shared
MainLayout
Dalam komponen (Shared/MainLayout.razor
), kelilingi markup HTML komponen dengan<div>
elemen yang memiliki atribut yangclass
diatur kepage
:<div class="page"> ... </div>
Tambahkan file berikut ke
Shared
folder :MainLayout.razor.css
:.page { position: relative; display: flex; flex-direction: column; } .main { flex: 1; } .sidebar { background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); } .top-row { background-color: #f7f7f7; border-bottom: 1px solid #d6d5d5; justify-content: flex-end; height: 3.5rem; display: flex; align-items: center; } .top-row ::deep a, .top-row .btn-link { white-space: nowrap; margin-left: 1.5rem; } .top-row a:first-child { overflow: hidden; text-overflow: ellipsis; } @media (max-width: 767.98px) { .top-row:not(.auth) { display: none; } .top-row.auth { justify-content: space-between; } .top-row a, .top-row .btn-link { margin-left: 0; } } @media (min-width: 768px) { .page { flex-direction: row; } .sidebar { width: 250px; height: 100vh; position: sticky; top: 0; } .top-row { position: sticky; top: 0; z-index: 1; } .main > div { padding-left: 2rem !important; padding-right: 1.5rem !important; } }
NavMenu.razor.css
:.navbar-toggler { background-color: rgba(255, 255, 255, 0.1); } .top-row { height: 3.5rem; background-color: rgba(0,0,0,0.4); } .navbar-brand { font-size: 1.1rem; } .oi { width: 2rem; font-size: 1.1rem; vertical-align: text-top; top: -2px; } .nav-item { font-size: 0.9rem; padding-bottom: 0.5rem; } .nav-item:first-of-type { padding-top: 1rem; } .nav-item:last-of-type { padding-bottom: 1rem; } .nav-item ::deep a { color: #d7d7d7; border-radius: 4px; height: 3rem; display: flex; align-items: center; line-height: 3rem; } .nav-item ::deep a.active { background-color: rgba(255,255,255,0.25); color: white; } .nav-item ::deep a:hover { background-color: rgba(255,255,255,0.1); color: white; } @media (min-width: 768px) { .navbar-toggler { display: none; } .collapse { /* Never collapse the sidebar for wide screens */ display: block; } }
File Blazor WebAssembly dasar
wwwroot/css/app.css
terbaru aplikasi atauwwwroot/css/site.css
file Blazor Server aplikasi menyertakan gaya berikut. Hapus gaya tambahan yang meninggalkan gaya berikut dan gaya apa pun yang telah Anda tambahkan ke aplikasi.Lembar gaya berikut ini hanya menyertakan gaya dasar dan tidak menyertakan gaya kustom yang ditambahkan oleh pengembang:
html, body { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; } a, .btn-link { color: #0366d6; } .btn-primary { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } .content { padding-top: 1.1rem; } .valid.modified:not([type=checkbox]) { outline: 1px solid #26b050; } .invalid { outline: 1px solid red; } .validation-message { color: red; } #blazor-error-ui { background: lightyellow; bottom: 0; box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); display: none; left: 0; padding: 0.6rem 1.25rem 0.7rem 1.25rem; position: fixed; width: 100%; z-index: 1000; } #blazor-error-ui .dismiss { cursor: pointer; position: absolute; right: 0.75rem; top: 0.5rem; }
Catatan
Contoh sebelumnya tidak menampilkan direktif
@import
untuk ikon Ikon Terbuka (open-iconic-bootstrap.css
), yang disediakan oleh Blazor templat proyek. Open Iconic ditinggalkan oleh para penjaganya.
Memperbarui proyek Blazor WebAssembly
Ikuti panduan di bagian Pembaruan Blazor WebAssembly dan Blazor Server proyek sebelumnya.
Blazor WebAssembly Untuk proyek, termasuk Client
proyek solusi yang dihosting, terapkan Blazor perubahan berikut pada file proyek:
Perbarui SDK dari
Microsoft.NET.Sdk.Web
keMicrosoft.NET.Sdk.BlazorWebAssembly
:- <Project Sdk="Microsoft.NET.Sdk.Web"> + <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
Catatan
Pembaruan ini hanya berlaku untuk proyek mandiri Blazor WebAssembly dan
Client
proyek solusi yang dihosting Blazor .Perbarui properti berikut:
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> <PropertyGroup> - <TargetFramework>netstandard2.1</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Hapus referensi paket ke Microsoft.AspNetCore.Components.WebAssembly.Build:
<ItemGroup> - <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />
Perbarui paket lain ke versi terbarunya. Versi terbaru dapat ditemukan di NuGet.org.
Di
wwwroot/index.html
, ubah elemen yang memuatApp
komponen ke<div>
elemen dengan setid
keapp
:-<app>Loading...</app> +<div id="app">Loading...</div>
Di
Program.Main
(Program.cs
), ubah referensi ke<app>
elemen ke pemilih CSS dengan menambahkan hash#
ke dalamnya:-builder.RootComponents.Add<App>("app"); +builder.RootComponents.Add<App>("#app");
Di
Program.Main
(Program.cs
), ubah pendaftaran sementaraHttpClient
default menjadi terlingkup, jika ada:-builder.Services.AddTransient(sp => new HttpClient - { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); +builder.Services.AddScoped(sp => new HttpClient + { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
Di
Program.Main
(Program.cs
) aplikasi solusi yangClient
dihosting Blazor :- Secara opsional, ganti
builder.HostEnvironment.BaseAddress
alamat dasar klien string. - Ubah pendaftaran pabrik klien sementara bernama menjadi cakupan.
-builder.Services.AddHttpClient("{APP NAMESPACE}.ServerAPI", - client => client.BaseAddress = new Uri("https://localhost:5001")) - .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>(); -builder.Services.AddTransient(sp => sp.GetRequiredService<IHttpClientFactory>() - .CreateClient("{APP NAMESPACE}.ServerAPI")); +builder.Services.AddHttpClient("{APP NAMESPACE}.ServerAPI", + client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)) + .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>(); +builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>() + .CreateClient("{APP NAMESPACE}.ServerAPI"));
Dalam kode sebelumnya,
{APP NAMESPACE}
tempat penampung adalah namespace aplikasi.- Secara opsional, ganti
Aplikasi mandiri Blazor WebAssembly dengan Akun Microsoft
Ikuti panduan di bagian Pembaruan Blazor WebAssembly dan proyek dan Blazor Server Pembaruan Blazor WebAssembly proyek sebelumnya.
Untuk aplikasi mandiri Blazor WebAssembly yang terdaftar di portal Azure untuk menggunakan ID Microsoft Entra (ME-ID) untuk Akun Microsoft:
Aplikasi ini memerlukan
openid
cakupan danoffline_access
:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
Di bilah Autentikasi pendaftaran aplikasi portal Azure:
- Hapus konfigurasi platform Web.
- Tambahkan konfigurasi platform aplikasi Satu halaman dengan URI pengalihan aplikasi.
- Nonaktifkan pemberian implisit untuk Token akses dan token ID.
Untuk informasi selengkapnya, lihat Mengamankan aplikasi mandiri ASP.NET Core Blazor WebAssembly dengan Akun Microsoft.
Aplikasi mandiri Blazor WebAssembly dengan MICROSOFT Entra ID (ME-ID)
Ikuti panduan di bagian Pembaruan Blazor WebAssembly dan proyek dan Blazor Server Pembaruan Blazor WebAssembly proyek sebelumnya.
Untuk aplikasi mandiri Blazor WebAssembly yang terdaftar di portal Azure untuk menggunakan ID Microsoft Entra (ME-ID):
Aplikasi ini memerlukan
https://graph.microsoft.com/User.Read
cakupan:options.ProviderOptions.DefaultAccessTokenScopes .Add("https://graph.microsoft.com/User.Read");
Di bilah Autentikasi pendaftaran aplikasi portal Azure:
- Hapus konfigurasi platform Web.
- Tambahkan konfigurasi platform aplikasi Satu halaman dengan URI pengalihan aplikasi.
- Nonaktifkan pemberian implisit untuk Token akses dan token ID.
Untuk informasi selengkapnya, lihat Mengamankan aplikasi mandiri ASP.NET Core Blazor WebAssembly dengan ID Microsoft Entra.
Aplikasi mandiri Blazor WebAssembly dengan Azure Active Directory (AAD) B2C
Ikuti panduan di bagian Pembaruan Blazor WebAssembly dan proyek dan Blazor Server Pembaruan Blazor WebAssembly proyek sebelumnya.
Untuk aplikasi mandiri Blazor WebAssembly yang terdaftar di portal Azure untuk menggunakan Azure Active Directory (AAD) B2C:
Aplikasi ini memerlukan
openid
cakupan danoffline_access
:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
Di bilah Autentikasi pendaftaran aplikasi portal Azure:
- Hapus konfigurasi platform Web.
- Tambahkan konfigurasi platform aplikasi Satu halaman dengan URI pengalihan aplikasi.
- Nonaktifkan pemberian implisit untuk Token akses dan token ID.
Untuk informasi selengkapnya, lihat Mengamankan aplikasi mandiri ASP.NET Core Blazor WebAssembly dengan Azure Active Directory B2C.
Aplikasi yang dihosting Blazor WebAssembly dengan MICROSOFT Entra ID (ME-ID) atau AAD B2C
Ikuti panduan di bagian Pembaruan Blazor WebAssembly dan proyek dan Blazor Server Pembaruan Blazor WebAssembly proyek sebelumnya.
Pendaftaran Client
aplikasi solusi yang dihosting Blazor yang menggunakan AAD atau AAD B2C untuk autentikasi pengguna harus menggunakan konfigurasi platform Azure Apps aplikasi satu halaman.
Di bilah Autentikasi pendaftaran aplikasi portal AzureClient
:
- Hapus konfigurasi platform Web.
- Tambahkan konfigurasi platform aplikasi Satu halaman dengan URI pengalihan aplikasi.
- Nonaktifkan pemberian implisit untuk Token akses dan token ID.
Untuk informasi selengkapnya, lihat:
- Mengamankan aplikasi ASP.NET Core Blazor WebAssembly yang dihosting dengan MICROSOFT Entra ID
- Mengamankan aplikasi ASP.NET Core Blazor WebAssembly yang dihosting dengan Azure Active Directory B2C
Memperbarui proyek Server dari solusi yang dihosting Blazor
Ikuti panduan di bagian sebelumnya:
- Pembaruan Blazor WebAssembly dan Blazor Server proyek
- Memperbarui Blazor WebAssembly proyek
- Bagian yang berlaku untuk penyedia aplikasi dengan Azure Active Directory:
Server
Perbarui proyek solusi yang dihosting Blazor sebagai aplikasi ASP.NET Core mengikuti panduan umum dalam artikel ini.
Selain itu, Server
proyek yang mengautentikasi pengguna ke aplikasi klien Blazor WebAssembly dengan MICROSOFT Entra ID (ME-ID) atau B2C harus mengadopsi paket Microsoft Identity v2.0 baru:
Untuk AAD:
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
Untuk AAD B2C:
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
Untuk referensi paket sebelumnya, tentukan versi paket untuk {VERSION}
tempat penampung pada NuGet.org:
Catatan
SDK Server
proyek dalam solusi yang dihosting Blazor WebAssembly tetap Microsoft.NET.Sdk.Web
:
<Project Sdk="Microsoft.NET.Sdk.Web">
Untuk informasi selengkapnya, lihat:
- Mengamankan aplikasi ASP.NET Core Blazor WebAssembly yang dihosting dengan MICROSOFT Entra ID
- Mengamankan aplikasi ASP.NET Core Blazor WebAssembly yang dihosting dengan Azure Active Directory B2C
Bersihkan dan bangun kembali solusinya
Setelah memigrasikan aplikasi atau solusi ke .NET 5, bersihkan dan bangun kembali aplikasi atau solusi. Jika ketidakcocokan paket ada antara referensi paket baru dan paket cache:
Hapus cache paket NuGet dengan menjalankan perintah berikut
dotnet nuget locals
dalam shell perintah:dotnet nuget locals --clear all
Bersihkan dan bangun kembali aplikasi atau solusi.
Pecahkan masalah
Ikuti Panduan pemecahan masalah di akhir Blazor WebAssembly topik keamanan yang berlaku untuk aplikasi Anda:
Aplikasi Blazor WebAssembly mandiri:
- Panduan umum untuk penyedia OIDC dan Pustaka Autentikasi WebAssembly
- Akun Microsoft
- ID Microsoft Entra (ME-ID)
- Azure Active Directory (AAD) B2C
Aplikasi Blazor WebAssembly yang dihosting:
Klien yang tidak sah untuk ID Microsoft Entra (ME-ID)
Setelah memutakhirkan Blazor WebAssembly aplikasi yang menggunakan AAD untuk autentikasi, Anda mungkin menerima kesalahan berikut pada panggilan balik masuk ke aplikasi setelah pengguna masuk dengan AAD:
info: Otorisasi Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] gagal. Persyaratan ini tidak terpenuhi: DenyAnonymousAuthorizationRequirement: Memerlukan pengguna yang diautentikasi.
Kesalahan panggilan balik masuk dari AAD:
- Kesalahan:
unauthorized_client
- Deskripsi:
AADB2C90058: The provided application is not configured to allow public clients.
Untuk mengatasi masalah ini:
- Di portal Azure, akses manifes aplikasi.
- Atur atribut ke
allowPublicClient
null
atautrue
.
Blazor Memperbarui Aplikasi Web Progresif (PWA)
Tambahkan item berikut ke file proyek aplikasi PWA:
<ItemGroup>
<ServiceWorker Include="wwwroot\service-worker.js"
PublishedContent="wwwroot\service-worker.published.js" />
</ItemGroup>
Menghapus tautan lembar gaya isolasi CSS pratinjau
Jika proyek wwwroot/index.html
(Blazor WebAssembly) atau Pages/_Host.cshtml
(Blazor Server) berisi elemen lembar gaya untuk scoped.styles.css
dari rilis <link>
pratinjau 5.0 sebelumnya, hapus <link>
tag:
-<link href="_framework/scoped.styles.css/" rel="stylesheet" />
Memperbarui Razor pustaka kelas (RCL)
Migrasikan Razor pustaka kelas (RCL) untuk memanfaatkan API atau fitur baru yang diperkenalkan sebagai bagian dari ASP.NET Core 5.0.
Untuk memperbarui RCL yang menargetkan komponen:
Perbarui properti berikut dalam file proyek:
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> - <TargetFramework>netstandard2.0</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Perbarui paket lain ke versi terbarunya. Versi terbaru dapat ditemukan di NuGet.org.
Untuk memperbarui MVC penargetan RCL, perbarui properti berikut dalam file proyek:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
Memperbarui referensi paket
Dalam file proyek, perbarui setiap Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*, dan atribut referensi Version
paket System.Net.Http.Json ke 5.0.0 atau yang lebih baru. Contohnya:
<ItemGroup>
- <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="3.1.6" />
- <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.6">
- <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="3.1.6" />
- <PackageReference Include="System.Net.Http.Json" Version="3.2.1" />
+ <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="5.0.0" />
+ <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0">
+ <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0" />
+ <PackageReference Include="System.Net.Http.Json" Version="5.0.0" />
</ItemGroup>
Memperbarui gambar Docker
Untuk aplikasi yang menggunakan Docker, perbarui pernyataan dan skrip Dockerfile FROM
Anda. Gunakan gambar dasar yang menyertakan runtime ASP.NET Core 5.0. Pertimbangkan perbedaan perintah berikut docker pull
antara ASP.NET Core 3.1 dan 5.0:
- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:5.0
Sebagai bagian dari perpindahan ke ".NET" sebagai nama produk, gambar Docker dipindahkan dari mcr.microsoft.com/dotnet/core
repositori ke mcr.microsoft.com/dotnet
. Untuk informasi selengkapnya, lihat dotnet/dotnet-docker#1939.
Perubahan pengikatan model di ASP.NET Core MVC dan Razor Pages
Nilai DateTime terikat model sebagai waktu UTC
Dalam ASP.NET Core 3.1 dan yang lebih lama, DateTime
nilai terikat model sebagai waktu lokal, di mana zona waktu ditentukan oleh server. DateTime
nilai terikat dari pemformatan input (JSON) dan DateTimeOffset
nilai terikat sebagai zona waktu UTC.
Di ASP.NET Core 5.0 dan yang lebih baru, pengikatan model secara konsisten mengikat DateTime
nilai dengan zona waktu UTC.
Untuk mempertahankan perilaku sebelumnya, hapus DateTimeModelBinderProvider
di Startup.ConfigureServices
:
services.AddControllersWithViews(options =>
options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());
ComplexObjectModelBinderProvider \ ComplexObjectModelBinder menggantikan ComplexTypeModelBinderProvider \ ComplexTypeModelBinder
Untuk menambahkan dukungan untuk pengikatan model jenis catatan C# 9, adalah ComplexTypeModelBinderProvider :
- Diannotasi sebagai usang.
- Tidak lagi terdaftar secara default.
Aplikasi yang mengandalkan keberadaan ComplexTypeModelBinderProvider
dalam ModelBinderProviders
koleksi perlu mereferensikan penyedia pengikat baru:
- var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexTypeModelBinderProvider>();
+ var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexObjectModelBinderProvider>();
UseDatabaseErrorPage usang
Templat ASP.NET Core 3.1 yang menyertakan opsi untuk akun pengguna individual menghasilkan panggilan ke UseDatabaseErrorPage. UseDatabaseErrorPage
sekarang usang dan harus diganti dengan kombinasi AddDatabaseDeveloperPageExceptionFilter
dan UseMigrationsEndPoint
, seperti yang ditunjukkan dalam kode berikut:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
+ services.AddDatabaseDeveloperPageExceptionFilter();
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
+ app.UseMigrationsEndPoint();
- app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
Untuk informasi lebih lanjut, lihat masalah GitHub ini.
Modul Inti ASP.NET (ANCM)
Jika ASP.NET Core Module (ANCM) bukan komponen yang dipilih saat Visual Studio diinstal atau jika versi ANCM sebelumnya diinstal pada sistem, unduh Penginstal Bundel Hosting .NET Core terbaru (unduh langsung) dan jalankan alat penginstal. Untuk informasi selengkapnya, lihat Bundel Hosting.
Perubahan referensi paket memengaruhi beberapa paket NuGet
Dengan migrasi beberapa Microsoft.Extensions.*
paket NuGet dari repositori dotnet/extensions ke dotnet/runtime, seperti yang dijelaskan dalam Memigrasikan konten dotnet/extensions ke dotnet/runtime dan dotnet/aspnetcore (aspnet/Announcements #411), perubahan pengemasan diterapkan ke beberapa paket yang dimigrasikan. Perubahan ini sering mengakibatkan perubahan namespace untuk .NET API.
Untuk meneliti API lebih lanjut untuk perubahan namespace aplikasi saat bermigrasi ke 5.0, gunakan browser .NET API.
Memigrasikan Microsoft.Identity. Web
Halaman wiki berikut menjelaskan cara memigrasikan Microsoft.Identity. Web dari ASP.NET Core 3.1 hingga 5.0:
Tutorial berikut juga menjelaskan migrasi:
- Pengguna masuk aplikasi Web ASP.NET Core dengan platform Microsoft identity di organisasi Anda. Lihat Opsi 2: Membuat sampel dari baris perintah.
- Masuk pengguna dengan platform Microsoft identity di aplikasi WPF Desktop dan panggil ASP.NET Core Web API. Lihat Bagaimana kode dibuat.
Tinjau perubahan yang melanggar
Untuk memutus perubahan dari .NET Core 3.1 ke .NET 5.0, lihat Melanggar perubahan untuk migrasi dari versi 3.1 ke 5.0. ASP.NET Core dan Entity Framework Core juga disertakan dalam daftar.
ASP.NET Core