Migrer d’ASP.NET Core 3.1 vers 5.0
Cet article explique comment mettre à jour un projet ASP.NET Core 3.1 existant vers ASP.NET Core 5.0. Pour obtenir des instructions sur la migration d'ASP.NET Core 3.1 vers ASP.NET Core 6.0, consultez Migrer d'ASP.NET Core 3.1 vers 6.0.
Prérequis
- Visual Studio 2019 version 16.8 ou ultérieure avec la charge de travail Développement ASP.NET et web
- SDK .NET 5.0
Mettre à jour la version du SDK .NET Core dans global.json
Si vous comptez sur un fichier global.json pour cibler une version spécifique du kit SDK .NET Core, mettez à jour la propriété version
vers la version du SDK .NET 5.0 qui est installée. Par exemple :
{
"sdk": {
- "version": "3.1.200"
+ "version": "5.0.100"
}
}
Mettre à jour le framework cible
Si vous mettez à jour un projet Blazor WebAssembly, passez à la section Mettre à jour Blazor WebAssembly les projets . Pour tout autre type de projet ASP.NET Core, mettez à jour le fichier projet du moniker de framework cible vers net5.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
Supprimez les dossiers bin
et obj
Vous devrez peut-être supprimer les dossiers bin
et obj
. Exécutez dotnet nuget locals --clear all
pour effacer le cache de package NuGet.
Modifications apportées à la logique de routage des applications Blazor dans la version 5.0.1 et les autres versions 5.x jusqu’à la version 6.0
Le calcul de la priorité de routage a changé dans la version corrective ASP.NET Core 5.0.1. Cela peut vous affecter si vous avez défini des itinéraires fourre-tout ou des itinéraires avec des paramètres facultatifs.
Ancien comportement
Avec le comportement précédent dans ASP.NET Core 5.0.0 ou version antérieure, les itinéraires dont la priorité est inférieure, comme {*slug}
, sont mis en correspondance avant les itinéraires ayant une priorité plus élevée, tels que /customer/{id}
.
Nouveau comportement
Le nouveau comportement dans ASP.NET Core 5.0.1 ou version ultérieure correspond plus étroitement au comportement de routage défini dans ASP.NET Core applications, où l’infrastructure calcule et établit d’abord la priorité d’itinéraire pour chaque segment et utilise uniquement la longueur de l’itinéraire pour rompre les liens comme critère secondaire.
Raison du changement
Le comportement d’origine est considéré comme un bogue dans l’implémentation, car notre objectif est que le système de routage Blazor se comporte de la même manière que le système de routage ASP.NET Core pour le sous-ensemble de fonctionnalités prises en charge par le routage de Blazor.
Action recommandée
Ajoutez l’attribut PreferExactMatches
au composantRouter
dans le fichier App.razor
pour choisir le comportement correct :
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
Lorsque PreferExactMatches
est défini sur @true
, la correspondance de route préfère les correspondances exactes aux caractères génériques.
Important
Toutes les applications doivent explicitement définir PreferExactMatches
sur @true
.
La possibilité de définir PreferExactMatches
sur @false
ou de le laisser non défini est fournie uniquement pour la compatibilité descendante.
Lorsque .NET 6 sera mis en production, le routeur préférera toujours des correspondances exactes, et l’option PreferExactMatches
ne sera pas disponible.
Mettez à jour les projetsBlazor WebAssembly et Blazor Server
Les conseils de cette section s’appliquent aux deux modèles d’hébergement Blazor. Les sections qui suivent cette section fournissent des conseils supplémentaires spécifiques aux modèles d’hébergement et aux types d’applications. Appliquez les conseils de toutes les sections pertinentes à votre application.
Dans
wwwroot/index.html
d’une application Blazor WebAssembly ou dePages/_Host.cshtml
d’une applicationBlazor Server, ajoutez un élément<link>
à l’élément<head>
pour les styles. Dans les valeurs d’attribut d’élément<link>
suivanteshref
, l’espace réservé{ASSEMBLY NAME}
est le nom de l’assembly de l’application.+<link href="{ASSEMBLY NAME}.styles.css" rel="stylesheet" />
Autonome Blazor WebAssembly ou exemple Blazor Server :
+<link href="BlazorSample.styles.css" rel="stylesheet" />
Exemple du projet
Client
d’une solution Blazor WebAssemblyhébergée+<link href="BlazorSample.Client.styles.css" rel="stylesheet" />
Incluez un nouvel espace de noms dans le fichier
_Imports.razor
de l’application pour la virtualisation des composants, Microsoft.AspNetCore.Components.Web.Virtualization. Les fichiers_Imports.razor
suivants affichent les espaces de noms par défaut dans les applications générées à partir des modèles de projet Blazor. L’espace réservé{ASSEMBLY NAME}
est le nom de l’assembly de l’application.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
Dans le composant
MainLayout
(Shared/MainLayout.razor
), entourez le balisage HTML du composant avec un élément<div>
dont l’attributclass
est défini surpage
:<div class="page"> ... </div>
Ajouter les fichiers suivants au dossier
Shared
: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; } }
Le dernier fichier de base
wwwroot/css/app.css
d’une application Blazor WebAssemblyou d’un fichierwwwroot/css/site.css
d’une application Blazor Server inclut les styles suivants. Supprimez les styles supplémentaires en laissant les styles suivants et tous les styles que vous avez ajoutés à l’application.La feuille de style suivante inclut uniquement les styles de base et n’inclut pas les styles personnalisés ajoutés par le développeur :
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; }
Remarque
L’exemple précédent n’affiche pas la directive
@import
pour les icônes Open Iconic (open-iconic-bootstrap.css
), fournies par le modèle de projet Blazor. Open Icon a été abandonné par ses mainteneurs.
Mettre à jour des projets Blazor WebAssembly
Suivez les instructions de la section précédente Mise à jour Blazor WebAssembly et de la section Blazor Server projets .
Pour un projet Blazor WebAssembly, y compris le projet Client
d’une solution hébergée Blazor , appliquez les modifications suivantes au fichier projet :
Mettez à jour le Kit de développement logiciel (SDK) de
Microsoft.NET.Sdk.Web
versMicrosoft.NET.Sdk.BlazorWebAssembly
:- <Project Sdk="Microsoft.NET.Sdk.Web"> + <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
Remarque
Cette mise à jour s’applique uniquement aux projets autonomes Blazor WebAssembly et aux projets
Client
de solutions Blazor hébergées .Mettez les propriétés suivantes à jour :
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> <PropertyGroup> - <TargetFramework>netstandard2.1</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Supprimez la référence de package à Microsoft.AspNetCore.Components.WebAssembly.Build :
<ItemGroup> - <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />
Mettez à jour d’autres packages vers leurs dernières versions. Vous trouverez les dernières versions sur NuGet.org.
Dans
wwwroot/index.html
, remplacez l’élément qui charge le composantApp
par un élément<div>
dont la valeurid
est configurée surapp
:-<app>Loading...</app> +<div id="app">Loading...</div>
Dans
Program.Main
(Program.cs
), remplacez la référence à l’élément<app>
par un sélecteur CSS en lui ajoutant un hachage#
:-builder.RootComponents.Add<App>("app"); +builder.RootComponents.Add<App>("#app");
Dans
Program.Main
(Program.cs
), remplacez une inscription temporaire par défautHttpClient
en étendue, le cas échéant :-builder.Services.AddTransient(sp => new HttpClient - { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); +builder.Services.AddScoped(sp => new HttpClient + { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
Dans
Program.Main
(Program.cs
) de l’applicationClient
des solutions Blazor hébergées :- Si vous le souhaitez, remplacez
builder.HostEnvironment.BaseAddress
par les adresses de base du client de chaîne. - Remplacez toutes les inscriptions de fabrique client temporaires nommées en étendue.
-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"));
Dans l’exemple précédent, l’espace réservé
{APP NAMESPACE}
est l’espace de noms de l’application.- Si vous le souhaitez, remplacez
Application autonome Blazor WebAssemblyavec des comptes Microsoft
Suivez les instructions de la section précédente Mise à jour Blazor WebAssembly et de la section Blazor Server projets et Mise à jourBlazor WebAssembly des projets.
Pour qu’une application Blazor WebAssembly autonome inscrite dans le portail Azure utilise Microsoft Entra ID (ME-ID) pour les comptes Microsoft :
L’application nécessite les tendues
openid
etoffline_access
:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
Dans le panneau inscription d’application Portail Azure Authentification :
- Ajoutez la configuration de la plateforme web.
- Ajoutez une configuration de plateforme d’application monopage avec l’URI de redirection de l’application.
- Désactivez l’octroi implicite pour les jetons d’accès et lesjetons d’ID.
Pour plus d’informations, consultez Sécuriser une application ASP.NET Core Blazor WebAssembly autonome avec les Comptes Microsoft .
Application Blazor WebAssembly autonome avec Microsoft Entra ID (ME-ID)
Suivez les instructions de la section précédente Mise à jour Blazor WebAssembly et de la section Blazor Server projets et Mise à jourBlazor WebAssembly des projets.
Pour qu’une application autonome Blazor WebAssembly inscrite dans le portail Azure utilise Microsoft Entra ID (ME-ID) :
L’application nécessite l’étendue
https://graph.microsoft.com/User.Read
:options.ProviderOptions.DefaultAccessTokenScopes .Add("https://graph.microsoft.com/User.Read");
Dans le panneau inscription d’application Portail Azure Authentification :
- Ajoutez la configuration de la plateforme web.
- Ajoutez une configuration de plateforme d’application monopage avec l’URI de redirection de l’application.
- Désactivez l’octroi implicite pour les jetons d’accès et lesjetons d’ID.
Pour plus d’informations, consultez Sécuriser une application autonome ASP.NET Core Blazor WebAssembly avec Microsoft Entra ID.
Application autonome Blazor WebAssembly avec Azure Active Directory (AAD) B2C
Suivez les instructions de la section précédente Mise à jour Blazor WebAssembly et de la section Blazor Server projets et Mise à jourBlazor WebAssembly des projets.
Pour qu’une application autonome Blazor WebAssembly inscrite dans le Portail Azure utilise Azure Active Directory (AAD) B2C:
L’application nécessite les tendues
openid
etoffline_access
:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
Dans le panneau inscription d’application Portail Azure Authentification :
- Ajoutez la configuration de la plateforme web.
- Ajoutez une configuration de plateforme d’application monopage avec l’URI de redirection de l’application.
- Désactivez l’octroi implicite pour les jetons d’accès et lesjetons d’ID.
Pour plus d’informations, consultez Sécuriser une application ASP.NET Core Blazor WebAssembly autonome avec Azure Active Directory B2C.
Application Blazor WebAssembly hébergée avec Microsoft Entra ID (ME-ID) ou AAD B2C
Suivez les instructions de la section précédente Mise à jour Blazor WebAssembly et de la section Blazor Server projets et Mise à jourBlazor WebAssembly des projets.
L’inscription d’application Client
d’une solution Blazor hébergée qui utilise AAD ou AAD B2C pour l’authentification utilisateur doit utiliser une configuration de plateforme Azure Apps à page unique .
Dans le panneau Client
Authentification de l’inscription d’application Portail Azure :
- Ajoutez la configuration de la plateforme web.
- Ajoutez une configuration de plateforme d’application monopage avec l’URI de redirection de l’application.
- Désactivez l’octroi implicite pour les jetons d’accès et lesjetons d’ID.
Pour plus d'informations, consultez les pages suivantes :
- Sécuriser une application ASP.NET Core Blazor WebAssembly hébergée avec Microsoft Entra ID
- Sécurisez une application ASP.NET Core Blazor WebAssembly hébergée avec Azure Active Directory B2C
Mettre à jour le projet serveur d’une solution hébergée Blazor
Suivez les instructions des sections précédentes :
- Mise à jour Blazor WebAssemblyetBlazor Server projets
- Mise à jourBlazor WebAssembly des projets
- Section qui s’applique au fournisseur de l’application avec Azure Active Directory :
Mettez à jour le projet Server
d’une solution Blazor hébergée en tant qu’application ASP.NET Core en suivant les instructions générales de cet article.
En outre, Server
projets qui authentifient les utilisateurs auprès des applications clientes Blazor WebAssembly avec Microsoft Entra ID (ME-ID) ou B2C doivent adopter de nouveaux packages Microsoft Identity v2.0 :
Pour AAD :
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
Pour 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}" />
Pour les références de package précédentes, déterminez les versions de package pour les espaces réservés {VERSION}
de NuGet.org :
Remarque
Le SDK du projet Server
dans une solution Blazor WebAssembly hébergée restent Microsoft.NET.Sdk.Web
:
<Project Sdk="Microsoft.NET.Sdk.Web">
Pour plus d'informations, consultez les pages suivantes :
- Sécuriser une application ASP.NET Core Blazor WebAssembly hébergée avec Microsoft Entra ID
- Sécurisez une application ASP.NET Core Blazor WebAssembly hébergée avec Azure Active Directory B2C
Nettoyer et reconstruire la solution
Après avoir migré l’application ou la solution vers .NET 5, propre et régénérez l’application ou la solution. Si des incompatibilités de package existent entre les nouvelles références de package et les packages mis en cache :
Installez le package NuGet en exécutant la commande suivante
dotnet nuget locals
dans un interpréteur de commandes :dotnet nuget locals --clear all
Nettoyez et régénérez l’application ou la solution.
Résoudre des problèmes
Suivez les conseils de résolution des problèmes à la fin de la rubrique de sécurité Blazor WebAssembly qui s’applique à votre application :
Applications Blazor WebAssembly autonomes :
- Aide générale pour les fournisseurs OIDC et la bibliothèque d’authentification WebAssembly
- Comptes Microsoft
- ID Microsoft Entra (ME-ID)
- Azure Active Directory (AAD) B2C
Applications Blazor WebAssembly hébergées :
Client non autorisé pour Microsoft Entra ID (ME-ID)
Après la mise à niveau d’une application Blazor WebAssembly qui utilise AAD pour l’authentification, vous pouvez recevoir l’erreur suivante lors du rappel de connexion à l’application une fois que l’utilisateur s’est connecté avec AAD :
Info : Échec de l’autorisation Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]. Ces conditions n’ont pas été remplies : DenyAnonymousAuthorizationRequirement : Nécessite un utilisateur authentifié.
Erreur de rappel de connexion à partir d’AAD :
- Erreur :
unauthorized_client
- Description :
AADB2C90058: The provided application is not configured to allow public clients.
Pour résoudre l’erreur :
- Dans le portail Azure, accédez au manifeste de l’application.
- Définissez l’attribut
allowPublicClient
surnull
outrue
.
Mettre à jour une Application web progressive (PWA) Blazor
Ajoutez l’élément suivant au fichier projet de l’application PWA :
<ItemGroup>
<ServiceWorker Include="wwwroot\service-worker.js"
PublishedContent="wwwroot\service-worker.published.js" />
</ItemGroup>
Supprimez le lien de préversion de la feuille de style d’isolation CSS
Si le projet wwwroot/index.html
(Blazor WebAssembly) ou Pages/_Host.cshtml
(Blazor Server) contient un élément de feuille de style <link>
pour scoped.styles.css
une version préliminaire 5.0 antérieure, supprimez la balise<link>
:
-<link href="_framework/scoped.styles.css/" rel="stylesheet" />
Mettre à jour les Razor bibliothèques de classes (RCL)
Migrez des Razor bibliothèques de classes (RCL) pour tirer parti des nouvelles API ou fonctionnalités introduites dans le cadre de ASP.NET Core 5.0.
Pour mettre à jour une RCL qui cible des composants :
Mettez à jour les propriétés suivantes dans le fichier projet :
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> - <TargetFramework>netstandard2.0</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Mettez à jour d’autres packages vers leurs dernières versions. Vous trouverez les dernières versions sur NuGet.org.
Pour mettre à jour une RCL ciblant MVC, mettez à jour les propriétés suivantes dans le fichier projet :
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
Mettre à jour les références de package
Dans le fichier projet, mettez à jour chaque référence de package Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.* et System.Net.Http.Json avec l’attribut Version
5.0.0 ou version ultérieure. Par exemple :
<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>
Mettre à jour les images Docker
Pour les applications utilisant Docker, mettez à jour vos instructions et scripts Dockerfile FROM
. Utilisez une image de base qui inclut le runtime ASP.NET Core 5.0. Considérez la différence de commande docker pull
suivante entre ASP.NET Core 3.1 et 5.0 :
- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:5.0
Dans le cadre du déplacement vers «.NET » comme nom de produit, les images Docker ont été déplacées des référentiels mcr.microsoft.com/dotnet/core
vers mcr.microsoft.com/dotnet
. Pour plus d’informations, consultez dotnet/dotnet-docker#1939.
Modifications de liaison de modèle dans ASP.NET Core MVC et Razor Pages
Les valeurs DateTime sont liées au modèle en tant qu’heures UTC
Dans ASP.NET Core 3.1 et versions antérieures, les valeursDateTime
étaient liées au modèle en tant qu’heure locale, où le fuseau horaire était déterminé par le serveur. Les valeurs DateTime
liées à partir de la mise en forme d’entrée (JSON) et les valeurs DateTimeOffset
ont été liées en tant que fuseaux horaires UTC.
Dans ASP.NET Core 5.0 et versions ultérieures, la liaison de modèle lie systématiquement les valeurs DateTime
au fuseau horaire UTC.
Pour conserver le comportement précédent, supprimez DateTimeModelBinderProvider
dans Startup.ConfigureServices
:
services.AddControllersWithViews(options =>
options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());
ComplexObjectModelBinderProvider \ ComplexObjectModelBinder replace ComplexTypeModelBinderProvider \ ComplexTypeModelBinder
Pour ajouter la prise en charge de liaison de modèle des types d’enregistrementsC# 9 , leComplexTypeModelBinderProvider est :
- Annoté comme obsolète.
- N’est plus inscrit par défaut.
Les applications qui s’appuient sur la présence du ComplexTypeModelBinderProvider
dans la collection ModelBinderProviders
doivent référencer le nouveau fournisseur de classeurs :
- var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexTypeModelBinderProvider>();
+ var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexObjectModelBinderProvider>();
UseDatabaseErrorPage obsolete
Les modèles ASP.NET Core 3.1 qui incluent une option pour les comptes d’utilisateur individuels génèrent un appel à UseDatabaseErrorPage. UseDatabaseErrorPage
est désormais obsolète et doit être remplacé par une combinaison de AddDatabaseDeveloperPageExceptionFilter
et UseMigrationsEndPoint
, comme indiqué dans le code suivant :
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();
}
Pour plus d’informations, consultez ce problème GitHub.
Module de base ASP.NET (ANCM)
Si le module ASP.NET Core (ANCM) n'était pas un composant sélectionné lors de l'installation de Visual Studio ou si une version antérieure de l'ANCM était installée sur le système, téléchargez le dernier programme d'installation du pack .NET Core Hosting (téléchargement direct) et exécutez l'installateur. Pour plus d'informations, consultez Pack d'hébergement.
Extensions : Modification des références de package affectant certains packages NuGet
Avec la migration de certains Microsoft.Extensions.*
packages NuGet du référentiel dotnet/extensions vers dotnet/runtime, tels que décrite dans Migration du contenu dotnet/extensions vers dotnet/runtime et dotnet/aspnetcore (cf. aspnet/Announcements #411), des modifications du packaging sont appliquées à certains des packages migrés. Ces modifications entraînent souvent des modifications d’espace de noms pour l’API .NET.
Pour rechercher plus en détail les API concernant les modifications apportées à l’espace de noms d’application lors de la migration vers la version 5.0, utilisez le navigateur d’API .NET.
Migrer Microsoft.Identity. Web
Les pages wiki suivantes expliquent comment migrer Microsoft.Identity. Web de ASP.NET Core 3.1 à 5.0 :
Les didacticiels suivants expliquent également la migration :
- Une application web ASP.NET Core connecte des utilisateurs avec la plateforme d’identity Microsoft dans votre organisation. Consultez Option 2 : créer l’exemple à partir de la ligne de commande.
- Connectez-vous à un utilisateur avec la plateforme Microsoft identity dans une application de bureau WPF et appelez une API web ASP.NET Core. Consultez Comment le code a-t-il été créé.
Examiner les changements avec rupture
Pour connaître les changements disruptifs de .NET Core 3.1 vers .NET 5.0, consultez Changements disruptifs pour la migration de la version 3.1 vers la version 5.0. ASP.NET Core et Entity Framework Core sont également inclus dans la liste.