Migrace z ASP.NET Core 3.1 na 5.0
Scott Addie
Tento článek vysvětluje, jak aktualizovat existující projekt ASP.NET Core 3.1 na ASP.NET Core 5.0.
Požadavky
- Visual Studio 2019 16.8 nebo novější s úlohou vývoje ASP.NET a webu
- .NET 5.0 SDK
Aktualizace .NET Core SDK verze v global.json
Pokud při cílení na global.js verzi .NET Core SDK spoléháte na soubor , aktualizujte vlastnost na nainstalovanou verzi version sady .NET 5.0 SDK. Příklad:
{
"sdk": {
- "version": "3.1.200"
+ "version": "5.0.100"
}
}
Aktualizace cílové architektury
Pokud aktualizujete Blazor WebAssembly projekt, přejděte do části Blazor WebAssembly Aktualizace projektů. U všech ostatních ASP.NET Core projektu aktualizujte moniker cílové architektury (TFM) souboru projektu na net5.0 :
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
Odstranění bin obj složek a
Možná budete muset odstranit složky bin obj a . Spuštěním dotnet nuget locals --clear all vymažte mezipaměť NuGet balíčku.
Změny Blazor logiky směrování aplikací v 5.0.1 a dalších verzích 5.x až do verze 6.0
Výpočet priority trasy se v ASP.NET Core verze opravy 5.0.1. To vás může ovlivnit, pokud jste definovali všechny trasy nebo trasy s volitelnými parametry.
Staré chování
S předchozím chováním ve verzi ASP.NET Core 5.0.0 nebo starší se trasy s nižší prioritou, například , shodují před trasami s vyšší {*slug} prioritou, například /customer/{id} .
Nové chování
Nové chování v ASP.NET Core 5.0.1 nebo novějších verzích přesněji odpovídá chování směrování definovanému v aplikacích ASP.NET Core, kde rozhraní nejprve počítá a stanovuje prioritu trasy pro každý segment a používá pouze délku trasy k přerušení vazeb jako sekundárních kritérií.
Důvod změny
Původní chování se považuje za chybu v implementaci, protože naším cílem je chovat se směrovací systém stejným způsobem jako systém směrování ASP.NET Core pro podmnožinu funkcí podporovaných Blazor Blazor směrováním.
Doporučená akce
Přidejte do komponenty v souboru atribut PreferExactMatches Router , abyste se App.razor rozhodli pro správné chování:
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
Pokud PreferExactMatches je nastavené na , porovnávání tras @true preferuje přesné shody před zástupnými znaky.
Důležité
Všechny aplikace by měl explicitně nastavit PreferExactMatches na @true .
Možnost nastavit nebo ponechat ji PreferExactMatches @false nenastavená je k dispozici pouze pro zpětnou kompatibilitu.
Po uvolnění rozhraní .NET 6 bude směrovač vždy preferovat přesné shody a možnost PreferExactMatches nebude dostupná.
Aktualizace Blazor WebAssembly Blazor Server a projekty
Pokyny v této části platí pro oba Blazor modely hostování. Oddíly následující po této části poskytují další pokyny specifické pro modely hostování a typy aplikací. Použijte pokyny ze všech relevantních částí aplikace.
V aplikaci nebo v aplikaci přidejte
wwwroot/index.htmlBlazor WebAssembly element doPages/_Host.cshtmlBlazor Server<link><head>elementu pro styly. V následujících<link>hodnotáchhrefatributu elementu je zástupný symbol názvem sestavení{ASSEMBLY NAME}aplikace.+<link href="{ASSEMBLY NAME}.styles.css" rel="stylesheet" />Samostatný Blazor WebAssembly nebo Blazor Server příklad:
+<link href="BlazorSample.styles.css" rel="stylesheet" />Clientpříklad projektu Blazor WebAssembly hostovaného řešení:+<link href="BlazorSample.Client.styles.css" rel="stylesheet" />Do souboru aplikace zahrnte nový obor
_Imports.razornázvů pro virtualizaci komponent, Microsoft.AspNetCore.Components.Web.Virtualization . Následující soubory_Imports.razorukazují výchozí obory názvů v aplikacích vygenerované ze Blazor šablon projektů. Zástupný{ASSEMBLY NAME}symbol je název sestavení aplikace.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}.SharedBlazor 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}.SharedV
MainLayoutkomponentě (Shared/MainLayout.razor) ohraničte kód HTML komponenty<div>elementem, který má atributclassnastavený napage:<div class="page"> ... </div>Do složky přidejte následující
Sharedsoubory: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; } }Nejnovější základní
wwwroot/css/app.csssoubor aplikace nebo souboru aplikace obsahuje následující Blazor WebAssemblywwwroot/css/site.cssBlazor Server styly. Odeberte další styly a opouštěte následující styly a všechny styly, které jste přidali do aplikace.Následující šablony stylů obsahují pouze základní styly a nezahrnují vlastní styly přidané vývojářem:
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css'); 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; }
Aktualizace Blazor WebAssembly projektů
Postupujte podle pokynů v předchozí části Aktualizace Blazor WebAssembly a Blazor Server projekty.
U Blazor WebAssembly projektu, včetně Client projektu hostovaného řešení, použijte v souboru projektu následující Blazor změny:
Aktualizujte sadu SDK z
Microsoft.NET.Sdk.WebnaMicrosoft.NET.Sdk.BlazorWebAssembly:- <Project Sdk="Microsoft.NET.Sdk.Web"> + <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">Poznámka
Tato aktualizace se vztahuje pouze na Blazor WebAssembly samostatné projekty a projekty
Clienthostovaných Blazor řešení.Aktualizujte následující vlastnosti:
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> <PropertyGroup> - <TargetFramework>netstandard2.1</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>Odeberte odkaz na balíček Microsoft.AspNetCore.Components.WebAssembly.Build:
<ItemGroup> - <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />Aktualizujte ostatní balíčky na jejich nejnovější verze. Nejnovější verze najdete na NuGet.org.
V
wwwroot/index.htmlsouboru změňte element, kterýAppnačítá<div>komponentu na prvek sidnastavenou naapp:-<app>Loading...</app> +<div id="app">Loading...</div>V
Program.Main( ) změňte odkaz na element na selektor CSS přidánímProgram.cs<app>hodnoty#hash:-builder.RootComponents.Add<App>("app"); +builder.RootComponents.Add<App>("#app");V
Program.Main(Program.cs) změňte výchozí přechodnouHttpClientregistraci na vymezenou, pokud je k dispozici:-builder.Services.AddTransient(sp => new HttpClient - { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); +builder.Services.AddScoped(sp => new HttpClient + { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });V
Program.Main( ) aplikaceProgram.csClienthostovaných Blazor řešení:- Volitelně můžete nahradit
builder.HostEnvironment.BaseAddressřetězcové základní adresy klienta. - Změňte všechny pojmenované přechodné registrace klientské továrny na vymezené.
-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"));V předchozím kódu je zástupný
{APP NAMESPACE}symbol oborem názvů aplikace.- Volitelně můžete nahradit
Samostatná Blazor WebAssembly aplikace s účty Microsoft
Postupujte podle pokynů v předchozích částech Aktualizace Blazor WebAssembly a projekty Blazor Server a Blazor WebAssembly Aktualizovat projekty.
Pro samostatnou Blazor WebAssembly aplikaci zaregistrovanou v Azure Portal používat Azure Active Directory (AAD) pro účty Microsoft:
Aplikace vyžaduje
openidoboryoffline_accessa :options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");V okně Azure Portal aplikace ověřování:
- Odeberte konfiguraci webové platformy.
- Přidejte konfiguraci platformy jedno stránkované aplikace s identifikátorem URI přesměrování aplikace.
- Zakažte implicitní udělení přístupových tokenů a tokenů ID.
Další informace naleznete v tématu zabezpečení Blazor WebAssembly samostatné aplikace v ASP.NET Core s účty Microsoft.
Samostatná Blazor WebAssembly aplikace s Azure Active Directory (AAD)
Postupujte podle pokynů v předchozích částech Aktualizace Blazor WebAssembly a projekty Blazor Server a Blazor WebAssembly Aktualizovat projekty.
Pro samostatnou Blazor WebAssembly aplikaci zaregistrovanou v Azure Portal používat Azure Active Directory (AAD):
Aplikace vyžaduje
https://graph.microsoft.com/User.Readobor:options.ProviderOptions.DefaultAccessTokenScopes .Add("https://graph.microsoft.com/User.Read");V okně Azure Portal aplikace ověřování:
- Odeberte konfiguraci webové platformy.
- Přidejte konfiguraci platformy jedno stránkované aplikace s identifikátorem URI přesměrování aplikace.
- Zakažte implicitní udělení přístupových tokenů a tokenů ID.
Další informace naleznete v tématu zabezpečení Blazor WebAssembly samostatné aplikace v ASP.NET Core s využitím Azure Active Directory.
Samostatná Blazor WebAssembly aplikace s Azure Active Directory (AAD) B2C
Postupujte podle pokynů v předchozích částech Aktualizace Blazor WebAssembly a projekty Blazor Server a Blazor WebAssembly Aktualizovat projekty.
Pro samostatnou Blazor WebAssembly aplikaci zaregistrovanou v Azure Portal používat Azure Active Directory (AAD) B2C:
Aplikace vyžaduje
openidoboryoffline_accessa :options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");V okně Azure Portal aplikace ověřování:
- Odeberte konfiguraci webové platformy.
- Přidejte konfiguraci platformy jedno stránkované aplikace s identifikátorem URI přesměrování aplikace.
- Zakažte implicitní udělení přístupových tokenů a tokenů ID.
Další informace naleznete v tématu Zabezpečení samostatné ASP.NET Core Blazor WebAssembly aplikace pomocí Azure Active Directory B2C.
Hostovaná Blazor WebAssembly aplikace s Azure Active Directory (AAD) nebo AAD B2C
Postupujte podle pokynů v předchozích částech Aktualizace Blazor WebAssembly a projekty Blazor Server a Blazor WebAssembly Aktualizovat projekty.
Registrace aplikace hostovaného řešení, které používá AAD nebo AAD B2C ověřování uživatelů, by měla používat konfiguraci platformy Client Azure Apps s jednou Blazor stránkou.
V okně Azure Portal Client aplikace ověřování:
- Odeberte konfiguraci webové platformy.
- Přidejte konfiguraci platformy jedno stránkované aplikace s identifikátorem URI přesměrování aplikace.
- Zakažte implicitní udělení přístupových tokenů a tokenů ID.
Další informace naleznete v tématu:
- Zabezpečení ASP.NET Core aplikace Blazor WebAssembly pomocí Azure Active Directory
- zabezpečení Blazor WebAssembly hostované aplikace v ASP.NET Core s využitím Azure Active Directory B2C
Aktualizace projektu Serveru hostovaného Blazor řešení
Postupujte podle pokynů v předchozích částech:
- Aktualizace Blazor WebAssembly a Blazor Server projekty
- Aktualizovat Blazor WebAssembly projekty
- Část, která se vztahuje na zprostředkovatele aplikace s Azure Active Directory:
aktualizujte Server projekt hostovaného Blazor řešení jako aplikaci ASP.NET Core podle obecných pokynů v tomto článku.
kromě toho Server projekty, které ověřují uživatele Blazor WebAssembly v klientských aplikacích pomocí Azure Active Directory (AAD) nebo B2C, by měly přijmout nové Identity balíčky Microsoft v 2.0:
Pro AAD:
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
Pro 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}" />
pro předchozí odkazy na balíček určete verze balíčku pro {VERSION} zástupné symboly na adrese NuGet. org:
Poznámka
Sada SDK Server projektu v hostovaném Blazor WebAssembly řešení zůstává Microsoft.NET.Sdk.Web :
<Project Sdk="Microsoft.NET.Sdk.Web">
Další informace naleznete v tématu:
- Zabezpečení ASP.NET Core aplikace Blazor WebAssembly pomocí Azure Active Directory
- zabezpečení Blazor WebAssembly hostované aplikace v ASP.NET Core s využitím Azure Active Directory B2C
Vyčistit a znovu sestavit řešení
Po migraci aplikace nebo řešení na rozhraní .NET 5 vyčistěte a znovu sestavte aplikaci nebo řešení. Pokud mezi novými odkazy na balíčky a balíčky uloženými v mezipaměti existují nekompatibility balíčků:
vymažte NuGet mezipaměti balíčků spuštěním následujícího
dotnet nuget localspříkazu v příkazovém prostředí:dotnet nuget locals --clear allVyčistěte a znovu sestavte aplikaci nebo řešení.
Řešení potíží
Postupujte podle pokynů k odstraňování problémů na konci Blazor WebAssembly tématu zabezpečení, které se týká vaší aplikace:
Samostatné Blazor WebAssembly aplikace:
- Obecné pokyny pro poskytovatele OIDC a knihovnu ověřování pro WebAssembly
- Účty Microsoft
- Azure Active Directory (AAD)
- Azure Active Directory (AAD) B2C
Hostované Blazor WebAssembly aplikace:
Neautorizovaný klient pro Azure Active Directory (AAD)
Po upgradu Blazor WebAssembly aplikace, která používá AAD pro ověřování, se může po přihlášení uživatele pomocí AAD zobrazit následující chyba při zpětném volání přihlašovacích údajů do aplikace:
informace: ověření Microsoft. AspNetCore. Authorization. DefaultAuthorizationService [2] se nezdařilo. Tyto požadavky nebyly splněny: DenyAnonymousAuthorizationRequirement: vyžaduje ověřeného uživatele.
Chyba zpětného volání přihlašovacího jména z AAD:
- Chyba:
unauthorized_client - Název
AADB2C90058: The provided application is not configured to allow public clients.
Řešení této chyby:
- V Azure Portal přistupovat k manifestu aplikace.
- Nastavte
allowPublicClientatribut nanullnebotrue.
Aktualizace Blazor progresivní webové aplikace (PWA)
do souboru projektu PWA aplikace přidejte následující položku:
<ItemGroup>
<ServiceWorker Include="wwwroot\service-worker.js"
PublishedContent="wwwroot\service-worker.published.js" />
</ItemGroup>
Odebrat náhled šablony pro izolaci stylů CSS
Pokud projekt wwwroot/index.html ( Blazor WebAssembly ) nebo Pages/_Host.cshtml ( Blazor Server ) obsahuje <link> element stylesheet pro scoped.styles.css starší verzi 5,0 verze Preview, odeberte <link> značku:
-<link href="_framework/scoped.styles.css/" rel="stylesheet" />
Aktualizovat Razor knihovny tříd (RCLs)
migrujte Razor knihovny tříd (RCLs), abyste mohli využívat nová rozhraní api nebo funkce, které jsou představeny jako součást ASP.NET Core 5,0.
Aktualizace RCL, který cílí na komponenty:
Aktualizujte následující vlastnosti v souboru projektu:
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> - <TargetFramework>netstandard2.0</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>Aktualizujte ostatní balíčky na jejich nejnovější verze. nejnovější verze najdete na adrese NuGet. org.
Chcete-li aktualizovat RCL cílené MVC, aktualizujte následující vlastnosti v souboru projektu:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
Aktualizovat odkazy na balíček
V souboru projektu aktualizujte všechny soubory Microsoft . AspNetCore. *, Microsoft. EntityFrameworkCore. *, Microsoft. extensions. *a System.Net.Http.Jsu atributu odkaz na balíček Version na 5.0.0 nebo novější. Příklad:
<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>
Aktualizace imagí Docker
Pro aplikace používající Docker aktualizujte příkazy souboru Dockerfile FROM a skripty. použijte základní bitovou kopii, která obsahuje modul runtime ASP.NET Core 5,0. zvažte následující docker pull příkaz rozdíl mezi ASP.NET Core 3,1 a 5,0:
- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:5.0
V rámci přesunu na ".NET" jako názvu produktu se image Docker přesunuly z mcr.microsoft.com/dotnet/core úložišť do mcr.microsoft.com/dotnet . Další informace naleznete v tématu dotnet/dotnet-Docker # 1939.
změny vazeb modelů v ASP.NET Core MVC a Razor stránkách
Hodnoty DateTime jsou vázané na model (UTC).
v ASP.NET Core 3,1 a starších verzích DateTime byly hodnoty modelem vázané na místní čas, kdy bylo časové pásmo určeno serverem. DateTime hodnoty svázané se vstupním formátováním (JSON) a DateTimeOffset hodnotami byly vázány jako časové pásmo UTC.
v ASP.NET Core 5,0 a novějších vázání modelů konzistentně váže DateTime hodnoty s časovým pásmem UTC.
Chcete-li zachovat předchozí chování, odeberte DateTimeModelBinderProvider Startup.ConfigureServices :
services.AddControllersWithViews(options =>
options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());
ComplexObjectModelBinderProvider \ ComplexObjectModelBinder nahradit ComplexTypeModelBinderProvider \ ComplexTypeModelBinder
Chcete-li přidat podporu modelu pro typy záznamů C# 9, ComplexTypeModelBinderProvider je:
- Poznámka jako zastaralá.
- Ve výchozím nastavení už není zaregistrované.
Aplikace, které spoléhají na přítomnost ComplexTypeModelBinderProvider v kolekci, se ModelBinderProviders musí odkazovat na nového poskytovatele pořadače:
- var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexTypeModelBinderProvider>();
+ var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexObjectModelBinderProvider>();
UseDatabaseErrorPage zastaralá
šablony ASP.NET Core 3,1, které obsahují možnost pro jednotlivé uživatelské účty, vygenerují volání UseDatabaseErrorPage . UseDatabaseErrorPage je nyní zastaralá a měla by být nahrazena kombinací AddDatabaseDeveloperPageExceptionFilter a UseMigrationsEndPoint , jak je znázorněno v následujícím kódu:
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();
}
další informace najdete v tomto GitHub problému.
Kontrola nejnovějších změn
Pro zásadní změny od .NET Core 3,1 do .NET 5,0 si přečtěte téma průlomové změny migrace z verze 3,1 na 5,0. seznam obsahuje i ASP.NET Core a Entity Framework Core.