Migrieren von ASP.net Core 3,1 zu 5,0Migrate from ASP.NET Core 3.1 to 5.0
Von Scott AddieBy Scott Addie
In diesem Artikel wird erläutert, wie ein vorhandenes ASP.net Core 3,1-Projekt auf ASP.net Core 5,0 aktualisiert wird.This article explains how to update an existing ASP.NET Core 3.1 project to ASP.NET Core 5.0.
VoraussetzungenPrerequisites
- Visual StudioVisual Studio
- Visual Studio CodeVisual Studio Code
- Visual Studio für MacVisual Studio for Mac
- Visual Studio 2019 Version 16.8 oder höher mit der Workload ASP.NET und WebentwicklungVisual Studio 2019 16.8 or later with the ASP.NET and web development workload
- .NET 5.0 SDK oder höher.NET 5.0 SDK or later
Aktualisieren der .NET Core SDK-Version in „global.json“Update .NET Core SDK version in global.json
Wenn Sie sich für eine bestimmte .net Core SDK Version auf eine global.jsin der Datei verlassen, aktualisieren Sie die version
-Eigenschaft auf die installierte Version von .net 5,0 SDK.If you rely upon a global.json file to target a specific .NET Core SDK version, update the version
property to the .NET 5.0 SDK version that's installed. Beispiel:For example:
{
"sdk": {
- "version": "3.1.200"
+ "version": "5.0.100"
}
}
Aktualisieren des Ziel FrameworksUpdate the target framework
Wenn Sie ein Blazor WebAssembly Projekt aktualisieren, fahren Sie mit dem Abschnitt Blazor WebAssembly Projekte aktualisieren fort.If updating a Blazor WebAssembly project, skip to the Update Blazor WebAssembly projects section. Für alle anderen ASP.net Core Projekttyp aktualisieren Sie den zielframeworkmoniker (TFM) der Projektdatei auf Folgendes net5.0
:For any other ASP.NET Core project type, update the project file's Target Framework Moniker (TFM) to net5.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
Änderungen an Blazor der APP-Routing Logik in 5.0.1Changes to Blazor app routing logic in 5.0.1
Die Berechnung der Routen Rangfolge wurde in der Patch-Version ASP.net Core 5.0.1 geändert.The computation of route precedence changed in the ASP.NET Core 5.0.1 patch release. Dies kann sich auf Sie auswirken, wenn Sie Catch-All-Routen oder-Routen mit optionalen Parametern definiert haben.This might affect you if you've defined catch-all routes or routes with optional parameters.
Altes VerhaltenOld behavior
Mit dem früheren Verhalten in ASP.net Core 5.0.0 oder früher werden Routen mit niedrigerer Rangfolge (z {*slug}
. b.) vor Routen mit höherer Rangfolge abgeglichen, z /customer/{id}
. b..With the prior behavior in ASP.NET Core 5.0.0 or earlier, routes with lower precedence, such as {*slug}
, are matched before routes with higher precedence, such as /customer/{id}
.
Neues VerhaltenNew behavior
Das neue Verhalten in ASP.net Core 5.0.1 oder höher stimmt genauer mit dem Routing Verhalten überein, das in ASP.net Core-apps definiert ist, wobei das Framework zuerst die Routen Rangfolge für jedes Segment berechnet und festlegt und nur die Länge der Route zum Unterbrechen von Verknüpfungen als sekundäre Kriterien verwendet.The new behavior in ASP.NET Core 5.0.1 or later more closely matches the routing behavior defined in ASP.NET Core apps, where the framework computes and establishes the route precedence for each segment first and only uses the length of the route to break ties as a secondary criteria.
Grund für die ÄnderungReason for change
Das ursprüngliche Verhalten wird in der Implementierung als Fehler betrachtet, da es sich um das Ziel des Routing Systems handelt, das sich auf Blazor die gleiche Weise verhält wie das ASP.net Core Routing System für die Teilmenge der Features, die durch das Routing unterstützt werden Blazor .The original behavior is considered a bug in the implementation because our goal is for the Blazor routing system to behave in the same way as the ASP.NET Core routing system for the subset of features supported by Blazor routing.
Empfohlene MaßnahmeRecommended action
Fügen Sie das- PreferExactMatches
Attribut der Router
Komponente in App.razor
der Datei hinzu, um das richtige Verhalten zu abonnieren:Add the PreferExactMatches
attribute to the Router
component in the App.razor
file to opt into the correct behavior:
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="true">
Wenn PreferExactMatches
auf festgelegt ist true
, bevorzugt die Routen Zuordnung exakte Übereinstimmungen über Platzhalter.When PreferExactMatches
is set to true
, route matching prefers exact matches over wildcards.
Wichtig
Alle apps sollten explizit auf festgelegt werden PreferExactMatches
true
.All apps should explicitly set PreferExactMatches
to true
.
Die Möglichkeit, die Einstellung auf festzulegen PreferExactMatches
false
oder zu verlassen, wird nur aus Gründen der Abwärtskompatibilität bereitgestellt.The ability to set PreferExactMatches
to false
or leave it unset is only provided for backward compatibility.
Wenn .net 6 veröffentlicht wird, bevorzugt der Router immer exakte Übereinstimmungen, und die PreferExactMatches
Option ist nicht verfügbar.When .NET 6 is released, the router will always prefer exact matches, and the PreferExactMatches
option won't be available.
Aktualisieren Blazor WebAssembly und Blazor Server ProjekteUpdate Blazor WebAssembly and Blazor Server projects
Die Anleitungen in diesem Abschnitt gelten für beide Blazor Hostingmodelle. In den Abschnitten dieses Abschnitts finden Sie zusätzliche Anleitungen für das Hosting von Modellen und App-Typen. Wenden Sie die Anleitungen aus allen relevanten Abschnitten auf Ihre APP an.The guidance in this section applies to both Blazor hosting models. Sections following this section provide additional guidance specific to hosting models and app types. Apply the guidance from all relevant sections to your app.
wwwroot/index.html
Fügen Sie in einer- Blazor WebAssembly app oder einer-Pages/_Host.cshtml
Blazor Server App dem-<link>
Element für Stile ein-Element hinzu<head>
.Inwwwroot/index.html
of a Blazor WebAssembly app or thePages/_Host.cshtml
of a Blazor Server app, add a<link>
element to the<head>
element for styles. In den folgenden<link>
Elementhref
Attributwerten ist der Platzhalter{ASSEMBLY NAME}
der AssemblyName der app.In the following<link>
elementhref
attribute values, the placeholder{ASSEMBLY NAME}
is the app's assembly name.+<link href="{ASSEMBLY NAME}.styles.css" rel="stylesheet" />
Eigenständiges Blazor WebAssembly oder Blazor Server Beispiel:Standalone Blazor WebAssembly or Blazor Server example:
+<link href="BlazorSample.styles.css" rel="stylesheet" />
Client
Projekt eines gehosteten Blazor WebAssembly Lösungs Beispiels:Client
project of a hosted Blazor WebAssembly solution example:+<link href="BlazorSample.Client.styles.css" rel="stylesheet" />
Fügen Sie einen neuen Namespace in die Datei der APP
_Imports.razor
für die komponentenvirtualisierungein Microsoft.AspNetCore.Components.Web.Virtualization .Include a new namespace in the app's_Imports.razor
file for component virtualization, Microsoft.AspNetCore.Components.Web.Virtualization. In den folgenden_Imports.razor
Dateien werden die Standardnamespaces in apps angezeigt, die aus den Blazor Projektvorlagen generiert wurden.The following_Imports.razor
files show the default namespaces in apps generated from the Blazor project templates. Der Platzhalter{ASSEMBLY NAME}
ist der AssemblyName der app.The placeholder{ASSEMBLY NAME}
is the app's assembly name.Blazor WebAssembly (
_Imports.razor
):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
):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
Umgeben Sie in derShared/MainLayout.razor
-Komponente () das HTML-Markup der Komponente mit einem-<div>
Element, für das ein-class
Attribut auf festgelegt istpage
:In theMainLayout
component (Shared/MainLayout.razor
), surround the component's HTML markup with a<div>
element that has aclass
attribute set topage
:<div class="page"> ... </div>
Fügen Sie dem Ordner die folgenden Dateien hinzu
Shared
:Add the following files to theShared
folder:MainLayout.razor.css
: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
: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; } }
Die neueste Basis
wwwroot/css/app.css
Datei einer APP Blazor WebAssembly oder einerwwwroot/css/site.css
Datei einer Blazor Server app enthält die folgenden Stile.The latest basewwwroot/css/app.css
file of a Blazor WebAssembly app orwwwroot/css/site.css
file of a Blazor Server app includes the following styles. Entfernen Sie zusätzliche Stile, und übernehmen Sie die folgenden Stile und alle, die Sie der app hinzugefügt haben.Remove extra styles leaving the following styles and any that you've added to the app.Das folgende Stylesheet umfasst nur Basis Stile und enthält keine benutzerdefinierten Stile, die vom Entwickler hinzugefügt wurden:The following stylesheet only includes base styles and does not include custom styles added by the developer:
@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; }
Aktualisieren von Blazor WebAssembly ProjektenUpdate Blazor WebAssembly projects
Befolgen Sie die Anweisungen im vorherigen Abschnitt zu Updates Blazor WebAssembly und Blazor Server Projekten .Follow the guidance in the preceding Update Blazor WebAssembly and Blazor Server projects section.
Blazor WebAssemblyWenden Sie für ein Projekt, einschließlich des Client
Projekts einer gehosteten Blazor Lösung, die folgenden Änderungen auf die Projektdatei an:For a Blazor WebAssembly project, including the Client
project of a hosted Blazor solution, apply the following changes to the project file:
Aktualisieren Sie das SDK von
Microsoft.NET.Sdk.Web
aufMicrosoft.NET.Sdk.BlazorWebAssembly
:Update the SDK fromMicrosoft.NET.Sdk.Web
toMicrosoft.NET.Sdk.BlazorWebAssembly
:- <Project Sdk="Microsoft.NET.Sdk.Web"> + <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
Hinweis
Dieses Update gilt nur für eigenständige Blazor WebAssembly Projekte und die
Client
Projekte gehosteter Blazor Lösungen.This update only applies to standalone Blazor WebAssembly projects and theClient
projects of hosted Blazor solutions.Aktualisieren Sie die folgenden Eigenschaften:Update the following properties:
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> <PropertyGroup> - <TargetFramework>netstandard2.1</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Entfernen Sie den Paket Verweis auf Microsoft. aspnetcore. Components. Webassembly. Build:Remove the package reference to Microsoft.AspNetCore.Components.WebAssembly.Build:
<ItemGroup> - <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />
Aktualisieren Sie andere Pakete auf die neuesten Versionen.Update other packages to their latest versions. Die neuesten Versionen finden Sie unter NuGet.org.The latest versions can be found at NuGet.org.
wwwroot/index.html
Ändern Sie in das-Element, das die-Komponente lädt, in ein-Element, dasApp
<div>
id
auf festgelegt istapp
:Inwwwroot/index.html
, change the element that loads theApp
component to a<div>
element with anid
set toapp
:-<app>Loading...</app> +<div id="app">Loading...</div>
In
Program.Main
(Program.cs
):InProgram.Main
(Program.cs
):- Ändern Sie den Verweis auf das
<app>
Element in einen CSS-Selektor, indem Sie einen Hashwert hinzufügen#
.Change the reference to the<app>
element to a CSS selector by adding a hash#
to it. - Ändern
HttpClient
Sie die Registrierung in einen Bereich.Change theHttpClient
registration to scoped.
-builder.RootComponents.Add<App>("app"); +builder.RootComponents.Add<App>("#app"); -builder.Services.AddTransient(sp => new HttpClient - { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); +builder.Services.AddScoped(sp => new HttpClient + { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
- Ändern Sie den Verweis auf das
Eigenständige Blazor WebAssembly App mit Microsoft-KontenStandalone Blazor WebAssembly app with Microsoft Accounts
Befolgen Sie die Anweisungen in den vorherigen Abschnitten Update Blazor WebAssembly und Blazor Server Projekte und Update Blazor WebAssembly Projekte .Follow the guidance in the preceding Update Blazor WebAssembly and Blazor Server projects and Update Blazor WebAssembly projects sections.
Für eine eigenständige Blazor WebAssembly app, die im Azure-Portal registriert ist, um Azure Active Directory (AAD) für Microsoft-Konten zu verwenden:For a standalone Blazor WebAssembly app registered in the Azure portal to use Azure Active Directory (AAD) for Microsoft Accounts:
Die APP erfordert die
openid
offline_access
Bereiche und:The app requires theopenid
andoffline_access
scopes:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
Auf dem Blatt Azure-Portal App-Registrierungs Authentifizierung :In the Azure portal app registration Authentication blade:
- Entfernen Sie die Webplattform -Konfiguration.Remove the Web platform configuration.
- Fügen Sie eine Einzelseiten-Anwendungs Platt Form Konfiguration mit dem Umleitungs-URI der APP hinzu.Add a Single-page application platform configuration with the app's redirect URI.
- Deaktivieren Sie die implizite Gewährung für Zugriffs Token und ID-Token.Disable Implicit grant for Access tokens and ID tokens.
Weitere Informationen finden Sie unter Sichern einer eigenständigen ASP.NET Core Blazor WebAssembly-App mit Microsoft-Konten.For more information, see Sichern einer eigenständigen ASP.NET Core Blazor WebAssembly-App mit Microsoft-Konten.
Eigenständige Blazor WebAssembly App mit Azure Active Directory (AAD)Standalone Blazor WebAssembly app with Azure Active Directory (AAD)
Befolgen Sie die Anweisungen in den vorherigen Abschnitten Update Blazor WebAssembly und Blazor Server Projekte und Update Blazor WebAssembly Projekte .Follow the guidance in the preceding Update Blazor WebAssembly and Blazor Server projects and Update Blazor WebAssembly projects sections.
Für eine eigenständige Blazor WebAssembly app, die im Azure-Portal registriert ist, um Azure Active Directory (AAD) zu verwenden:For a standalone Blazor WebAssembly app registered in the Azure portal to use Azure Active Directory (AAD):
Die APP erfordert den folgenden
https://graph.microsoft.com/User.Read
Bereich:The app requires thehttps://graph.microsoft.com/User.Read
scope:options.ProviderOptions.DefaultAccessTokenScopes .Add("https://graph.microsoft.com/User.Read");
Auf dem Blatt Azure-Portal App-Registrierungs Authentifizierung :In the Azure portal app registration Authentication blade:
- Entfernen Sie die Webplattform -Konfiguration.Remove the Web platform configuration.
- Fügen Sie eine Einzelseiten-Anwendungs Platt Form Konfiguration mit dem Umleitungs-URI der APP hinzu.Add a Single-page application platform configuration with the app's redirect URI.
- Deaktivieren Sie die implizite Gewährung für Zugriffs Token und ID-Token.Disable Implicit grant for Access tokens and ID tokens.
Weitere Informationen finden Sie unter Sichern einer eigenständigen Blazor WebAssembly-App in ASP.NET Core mit Azure Active Directory.For more information, see Sichern einer eigenständigen Blazor WebAssembly-App in ASP.NET Core mit Azure Active Directory.
Eigenständige Blazor WebAssembly App mit Azure Active Directory (AAD) B2CStandalone Blazor WebAssembly app with Azure Active Directory (AAD) B2C
Befolgen Sie die Anweisungen in den vorherigen Abschnitten Update Blazor WebAssembly und Blazor Server Projekte und Update Blazor WebAssembly Projekte .Follow the guidance in the preceding Update Blazor WebAssembly and Blazor Server projects and Update Blazor WebAssembly projects sections.
Für eine eigenständige Blazor WebAssembly app, die im Azure-Portal registriert ist, um Azure Active Directory (AAD) B2C zu verwenden:For a standalone Blazor WebAssembly app registered in the Azure portal to use Azure Active Directory (AAD) B2C:
Die APP erfordert die
openid
offline_access
Bereiche und:The app requires theopenid
andoffline_access
scopes:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
Auf dem Blatt Azure-Portal App-Registrierungs Authentifizierung :In the Azure portal app registration Authentication blade:
- Entfernen Sie die Webplattform -Konfiguration.Remove the Web platform configuration.
- Fügen Sie eine Einzelseiten-Anwendungs Platt Form Konfiguration mit dem Umleitungs-URI der APP hinzu.Add a Single-page application platform configuration with the app's redirect URI.
- Deaktivieren Sie die implizite Gewährung für Zugriffs Token und ID-Token.Disable Implicit grant for Access tokens and ID tokens.
Weitere Informationen finden Sie unter Sichern einer eigenständigen Blazor WebAssembly-App in ASP.NET Core mit Azure Active Directory B2C.For more information, see Sichern einer eigenständigen Blazor WebAssembly-App in ASP.NET Core mit Azure Active Directory B2C.
Gehostete Blazor WebAssembly App mit Azure Active Directory (AAD) oder Aad B2CHosted Blazor WebAssembly app with Azure Active Directory (AAD) or AAD B2C
Befolgen Sie die Anweisungen in den vorherigen Abschnitten Update Blazor WebAssembly und Blazor Server Projekte und Update Blazor WebAssembly Projekte .Follow the guidance in the preceding Update Blazor WebAssembly and Blazor Server projects and Update Blazor WebAssembly projects sections.
Client
Bei der APP-Registrierung einer gehosteten Blazor Lösung, die Aad oder Aad B2C für die Benutzerauthentifizierung verwendet, sollte eine Single-Page-Anwendung für die Azure-Apps-Plattform konfiguriert werden.The Client
app registration of a hosted Blazor solution that uses AAD or AAD B2C for user authentication should use a Single-page application Azure Apps platform configuration.
Auf dem Client
Blatt Azure-Portal App-Registrierungs Authentifizierung :In the Azure portal Client
app registration Authentication blade:
- Entfernen Sie die Webplattform -Konfiguration.Remove the Web platform configuration.
- Fügen Sie eine Einzelseiten-Anwendungs Platt Form Konfiguration mit dem Umleitungs-URI der APP hinzu.Add a Single-page application platform configuration with the app's redirect URI.
- Deaktivieren Sie die implizite Gewährung für Zugriffs Token und ID-Token.Disable Implicit grant for Access tokens and ID tokens.
Weitere Informationen finden Sie unterFor more information, see:
- Sichern einer gehosteten ASP.NET Core Blazor WebAssembly-App mit Azure Active Directory
- Sichern einer gehosteten ASP.NET Core Blazor WebAssembly-App mit Azure Active Directory B2C
Aktualisieren des Server Projekts einer gehosteten Blazor LösungUpdate the Server project of a hosted Blazor solution
Befolgen Sie die Anweisungen in den vorangehenden Abschnitten:Follow the guidance in the preceding sections:
- Aktualisieren Blazor WebAssembly und Blazor Server ProjekteUpdate Blazor WebAssembly and Blazor Server projects
- Aktualisieren von Blazor WebAssembly ProjektenUpdate Blazor WebAssembly projects
- Der Abschnitt, der für den Anbieter der APP mit Azure Active Directory gilt:The section that applies to the app's provider with Azure Active Directory:
- Eigenständige Blazor WebAssembly App mit Microsoft-KontenStandalone Blazor WebAssembly app with Microsoft Accounts
- Eigenständige Blazor WebAssembly App mit Azure Active Directory (AAD)Standalone Blazor WebAssembly app with Azure Active Directory (AAD)
- Eigenständige Blazor WebAssembly App mit Azure Active Directory (AAD) B2CStandalone Blazor WebAssembly app with Azure Active Directory (AAD) B2C
Aktualisieren Sie das Server
Projekt einer gehosteten Blazor Lösung als ASP.net Core-APP, indem Sie die allgemeine Anleitung in diesem Artikel befolgen.Update the Server
project of a hosted Blazor solution as an ASP.NET Core app following the general guidance in this article.
Außerdem Server
sollten Projekte, die Benutzer für Client- Blazor WebAssembly apps mit Azure Active Directory (AAD) oder B2C authentifizieren, neue Microsoft Identity v 2.0-Pakete übernehmen:Additionally, Server
projects that authenticate users to client Blazor WebAssembly apps with Azure Active Directory (AAD) or B2C should adopt new Microsoft Identity v2.0 packages:
Für Aad:For AAD:
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
Aad B2C:For 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}" />
Bestimmen Sie für die vorangehenden Paket Verweise die Paketversionen für die {VERSION}
Platzhalter unter NuGet.org:For the preceding package references, determine the package versions for the {VERSION}
placeholders at NuGet.org:
Hinweis
Das SDK des Server
Projekts in einer gehosteten Blazor WebAssembly Lösung bleibt bestehen Microsoft.NET.Sdk.Web
:The SDK of the Server
project in a hosted Blazor WebAssembly solution remains Microsoft.NET.Sdk.Web
:
<Project Sdk="Microsoft.NET.Sdk.Web">
Weitere Informationen finden Sie unterFor more information, see:
- Sichern einer gehosteten ASP.NET Core Blazor WebAssembly-App mit Azure Active Directory
- Sichern einer gehosteten ASP.NET Core Blazor WebAssembly-App mit Azure Active Directory B2C
Bereinigen und Neuerstellen der Projekt MappeClean and rebuild the solution
Nachdem Sie die APP oder Lösung zu .net 5 migriert haben, müssen Sie die APP oder Projekt Mappe bereinigen und neu erstellenAfter migrating the app or solution to .NET 5, clean and rebuild the app or solution. Wenn Paket Inkompatibilitäten zwischen neuen Paket verweisen und zwischengespeicherten Paketen vorhanden sind:If package incompatibilities exist between new package references and cached packages:
Löschen Sie die nuget-Paket Caches, indem Sie den folgenden
dotnet nuget locals
Befehl in einer Befehlsshell ausführen:Clear NuGet package caches by executing the followingdotnet nuget locals
command in a command shell:dotnet nuget locals --clear all
Bereinigen und erneutes Erstellen der APP oder Projekt Mappe.Clean and rebuild the app or solution.
ProblembehandlungTroubleshoot
Befolgen Sie die Anleitung zur Problembehandlung am Ende des Blazor WebAssembly Sicherheits Themas, das für Ihre APP gilt:Follow the Troubleshoot guidance at the end of the Blazor WebAssembly security topic that applies to your app:
Eigenständige Blazor WebAssembly-Apps:Standalone Blazor WebAssembly apps:
- Allgemeiner Leitfaden für OIDC-Anbieter und die WebAssembly-AuthentifizierungsbibliothekGeneral guidance for OIDC providers and the WebAssembly Authentication Library
- Microsoft-KontenMicrosoft Accounts
- Azure Active Directory (AAD)Azure Active Directory (AAD)
- Azure Active Directory (AAD) B2CAzure Active Directory (AAD) B2C
Gehostete Blazor WebAssembly-Apps:Hosted Blazor WebAssembly apps:
- Azure Active Directory (AAD)Azure Active Directory (AAD)
- Azure Active Directory (AAD) B2CAzure Active Directory (AAD) B2C
- Identity ServerIdentity Server
Nicht autorisierter Client für Azure Active Directory (AAD)Unauthorized client for Azure Active Directory (AAD)
Nach dem Upgrade einer Blazor WebAssembly app, die Aad für die Authentifizierung verwendet, erhalten Sie möglicherweise die folgende Fehlermeldung für den Anmelde Rückruf an die APP, nachdem sich der Benutzer mit Aad angemeldet hat:After upgrading a Blazor WebAssembly app that uses AAD for authentication, you may receive the following error on the login callback to the app after the user signs in with AAD:
Info: Die Autorisierung von Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Authorization ist fehlgeschlagen.info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Authorization failed. Diese Anforderungen wurden nicht erfüllt: DenyAnonymousAuthorizationRequirement: Erfordert einen authentifizierten Benutzer.These requirements were not met: DenyAnonymousAuthorizationRequirement: Requires an authenticated user.
Anmelderückruffehler von AAD:Login callback error from AAD:
- Fehler:
unauthorized_client
Error:unauthorized_client
- Description (Beschreibung):
AADB2C90058: The provided application is not configured to allow public clients.
Description:AADB2C90058: The provided application is not configured to allow public clients.
So beheben Sie den FehlerTo resolve the error:
- Greifen Sie im Azure-Portal auf das Manifest der App zu.In the Azure portal, access the app's manifest.
- Legen Sie das Attribut
allowPublicClient
aufnull
odertrue
fest.Set theallowPublicClient
attribute tonull
ortrue
.
Aktualisieren einer Blazor progressiven Webanwendung (PWA)Update a Blazor Progressive Web Application (PWA)
Fügen Sie der Projektdatei der PWA-App Folgendes Element hinzu:Add the following item to the PWA app's project file:
<ItemGroup>
<ServiceWorker Include="wwwroot\service-worker.js"
PublishedContent="wwwroot\service-worker.published.js" />
</ItemGroup>
Aktualisieren von Razor Klassenbibliotheken (rcls)Update Razor class libraries (RCLs)
Migrieren Sie Razor Klassenbibliotheken (rcls), um neue APIs oder Features zu nutzen, die als Teil von ASP.net Core 5,0 eingeführt werden.Migrate Razor class libraries (RCLs) to take advantage of new APIs or features that are introduced as part of ASP.NET Core 5.0.
So aktualisieren Sie eine RCL-Zielkomponente:To update a RCL that targets components:
Aktualisieren Sie die folgenden Eigenschaften in der Projektdatei:Update the following properties in the project file:
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> - <TargetFramework>netstandard2.0</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Aktualisieren Sie andere Pakete auf die neuesten Versionen.Update other packages to their latest versions. Die neuesten Versionen finden Sie unter NuGet.org.The latest versions can be found at NuGet.org.
Aktualisieren Sie die folgenden Eigenschaften in der Projektdatei, um eine RCL zu aktualisieren, die auf MVC ausgerichtet ist:To update an RCL targeting MVC, update the following properties in the project file:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
Aktualisieren von PaketverweisenUpdate package references
Aktualisieren Sie in der Projektdatei alle Microsoft. aspnetcore. *, Microsoft. entityframeworkcore. *, Microsoft. Extensions. *, und System.Net.Http.Jsauf das Attribut des Paket Verweises auf Version
5.0.0 oder höher.In the project file, update each Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*, and System.Net.Http.Json package reference's Version
attribute to 5.0.0 or later. Beispiel:For example:
<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>
Aktualisieren von Docker-ImagesUpdate Docker images
Aktualisieren Sie die dockerfile FROM
-Anweisungen und-Skripts für apps, die Docker verwenden.For apps using Docker, update your Dockerfile FROM
statements and scripts. Verwenden Sie ein Basis Image, das den ASP.net Core 5,0-Lauf Zeit Modul einschließt.Use a base image that includes the ASP.NET Core 5.0 runtime. Beachten Sie den folgenden docker pull
Befehls Unterschied zwischen ASP.net Core 3,1 und 5,0:Consider the following docker pull
command difference between ASP.NET Core 3.1 and 5.0:
- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:5.0
Im Rahmen der Umstellung auf ".net" als Produktname wurden die Docker-Images aus den mcr.microsoft.com/dotnet/core
Depots in verschoben mcr.microsoft.com/dotnet
.As part of the move to ".NET" as the product name, the Docker images moved from the mcr.microsoft.com/dotnet/core
repositories to mcr.microsoft.com/dotnet
. Weitere Informationen finden Sie unter dotnet/dotnet-docker # 1939.For more information, see dotnet/dotnet-docker#1939.
Änderungen an der Modell Bindung in ASP.net Core MVC und Razor SeitenModel binding changes in ASP.NET Core MVC and Razor Pages
DateTime-Werte sind als UTC-Zeitmodell gebunden.DateTime values are model bound as UTC times
In ASP.net Core 3,1 und früheren Versionen DateTime
Warenwerte Modell gebunden als lokale Zeit, in der die Zeitzone vom Server bestimmt wurde.In ASP.NET Core 3.1 and earlier, DateTime
values were model-bound as local time, where the timezone was determined by the server. DateTime
Werte, die von der Eingabe Formatierung (JSON) und den Werten gebunden sind, DateTimeOffset
wurden als UTC-Zeit Zonen gebunden.DateTime
values bound from input formatting (JSON) and DateTimeOffset
values were bound as UTC timezones.
In ASP.net Core 5,0 und höher bindet die Modell Bindung DateTime
die Werte konsistent an die UTC-Zeitzone.In ASP.NET Core 5.0 and later, model binding consistently binds DateTime
values with the UTC timezone.
Wenn Sie das vorherige Verhalten beibehalten möchten, entfernen Sie das DateTimeModelBinderProvider
in Startup.ConfigureServices
:To retain the previous behavior, remove the DateTimeModelBinderProvider
in Startup.ConfigureServices
:
services.AddControllersWithViews(options =>
options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());
Complexobjectmodelbinderprovider \ complexobjectmodelbinder Replace complextypemodelbinderprovider \ complextypemodelbinderComplexObjectModelBinderProvider \ ComplexObjectModelBinder replace ComplexTypeModelBinderProvider \ ComplexTypeModelBinder
Zum Hinzufügen der Unterstützung für Modell Bindung c# 9-Daten Satz Typen ComplexTypeModelBinderProvider ist:To add support for model binding C# 9 record types, the ComplexTypeModelBinderProvider is:
- Als veraltet gekennzeichnet.Annotated as obsolete.
- Nicht mehr standardmäßig registriert.No longer registered by default.
Apps, die auf dem vorhanden sein von in der-Auflistung basieren, ComplexTypeModelBinderProvider
ModelBinderProviders
müssen auf den neuen Binder Anbieter verweisen:Apps that rely on the presence of the ComplexTypeModelBinderProvider
in the ModelBinderProviders
collection need to reference the new binder provider:
- var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexTypeModelBinderProvider>();
+ var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexObjectModelBinderProvider>();
Usedatabaseerrorpage veraltetUseDatabaseErrorPage obsolete
Die ASP.net Core 3,1-Vorlagen, die eine Option für einzelne Benutzerkonten enthalten, generieren einen-Rückruf UseDatabaseErrorPage .The ASP.NET Core 3.1 templates that include an option for individual user accounts generate a call to UseDatabaseErrorPage. UseDatabaseErrorPage
ist mittlerweile veraltet und sollte durch eine Kombination von und ersetzt werden AddDatabaseDeveloperPageExceptionFilter
UseMigrationsEndPoint
, wie im folgenden Code gezeigt:UseDatabaseErrorPage
is now obsolete and should be replaced with a combination of AddDatabaseDeveloperPageExceptionFilter
and UseMigrationsEndPoint
, as shown in the following code:
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();
}
Weitere Informationen finden Sie in diesem GitHub-Issue.For more information, see this GitHub issue.
Wichtige Änderungen überprüfenReview breaking changes
Grundlegende Änderungen von .net Core 3,1 auf .net 5,0 finden Sie unter Breaking Changes for Migration from Version 3,1 to 5,0.For breaking changes from .NET Core 3.1 to .NET 5.0, see Breaking changes for migration from version 3.1 to 5.0. ASP.net Core und Entity Framework Core sind auch in der Liste enthalten.ASP.NET Core and Entity Framework Core are also included in the list.