Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
ASP.NET Core fournit les fonctionnalités de développement d’applications web utilisées par .NET Core.
Sélectionnez l’un des liens suivants pour voir les changements cassants dans une version spécifique :
Les changements cassants suivants dans ASP.NET Core 3.0 et 3.1 sont documentés sur cette page :
- Les API Antiforgery, CORS, Diagnostics, MVC et Routage obsolètes ont été supprimées
- Authentification : dépréciation de Google+
- Authentication : propriété HttpContext.Authentication supprimée
- Authentification : types Newtonsoft.Json remplacés
- Authentification : la signature OAuthHandler ExchangeCodeAsync a été modifiée
- Autorisation : la surcharge AddAuthorization a été déplacée vers un autre assembly
- Autorisation : IAllowAnonymous supprimé de AuthorizationFilterContext.Filters
- Autorisation : les implémentations IAuthorizationPolicyProvider nécessitent une nouvelle méthode
- Mise en cache : propriété CompactOnMemoryPressure supprimée
- Mise en cache : Microsoft.Extensions.Caching.SqlServer utilise un nouveau package SqlClient
- Protection des données : DataProtection.Blobs utilise de nouvelles API de stockage Azure
- Hébergement : AspNetCoreModule V1 supprimé de l’offre groupée d’hébergement Windows
- Hébergement : l’hôte générique restreint l’injection de constructeur de démarrage
- Hébergement : redirection HTTPS activée pour les applications hors processus IIS
- Hébergement : types IHostingEnvironment et IApplicationLifetime remplacés
- Hébergement : ObjectPoolProvider supprimé des dépendances WebHostBuilder
- HTTP : impact des changements apportés à la propriété SameSite du navigateur sur l’authentification
- HTTP : l’extensibilité par DéfautHttpContext a été supprimée
- HTTP : les champs HeaderNames sont passés à des champs statiques en lecture seule
- HTTP : changements de l’infrastructure du corps de la réponse
- HTTP : certaines valeurs par défaut SameSite du cookie ont été modifiées
- HTTP : E/S synchrones désactivées par défaut
- Identité : surcharge de la méthode AddDefaultUI supprimée
- Identité : changement de version du démarrage de l’interface utilisateur
- Identité : SignInAsync lève l’exception pour l’identité non authentifiée
- Identité : le constructeur SignInManager accepte le nouveau paramètre
- Identité : l’interface utilisateur utilise la fonctionnalité de ressources web statiques
- Kestrel : adaptateurs de connexion supprimés
- Kestrel : assembly HTTPS vide supprimé
- Kestrel : les en-têtes de codes de fin des requêtes ont été déplacés vers la nouvelle collection
- Kestrel : changements de la couche d’abstraction de transport
- Localisation : API marquées comme obsolètes
- Journalisation : la classe DebugLogger est rendue interne
- MVC : suffixe asynchrone de l’action du contrôleur supprimé
- MVC : JsonResult déplacé vers Microsoft.AspNetCore.Mvc.Core
- MVC : outil de précompilation déprécié
- MVC : types passés en interne
- MVC : le shim de compatibilité de l’API web a été supprimé
- Razor : l’API RazorTemplateEngine a été supprimée
- Razor : compilation du runtime déplacée vers un package
- État de session : API obsolètes supprimées
- Infrastructure partagée : suppression de l’assembly de Microsoft.AspNetCore.App
- Infrastructure partagée : Microsoft.AspNetCore.All supprimé
- SignalR : HandshakeProtocol.SuccessHandshakeData remplacé
- SignalR : méthodes HubConnection supprimées
- SignalR : les constructeurs HubConnectionContext ont été modifiés
- SignalR : changement de nom du package client JavaScript
- SignalR : API obsolètes
- SPA : changement par défaut de secours de l’enregistreur d’événements de la console SpaServices et NodeServices
- SPA : SpaServices et NodeServices marqués comme obsolètes
- Version cible de .Net Framework : .NET Framework non pris en charge
ASP.NET Core 3.1
HTTP : impact des changements apportés à la propriété SameSite du navigateur sur l’authentification
Certains navigateurs, tels que Chrome et Firefox, ont apporté des changements cassants à leurs implémentations de SameSite
dans le cadre de la gestion des cookies. Les changements ont un impact sur les scénarios d’authentification à distance, tels que OpenID Connect et WS-Federation, qui doivent les refuser en envoyant SameSite=None
. Toutefois, SameSite=None
s’arrête sur iOS 12 et certaines versions antérieures d’autres navigateurs. L’application doit détecter ces versions et omettre SameSite
.
Pour plus d’informations sur ce problème, consultez dotnet/aspnetcore#14996.
Version introduite
3.1 Préversion 1
Ancien comportement
SameSite
est une extension du projet de norme 2016 pour les cookies HTTP. Cela permet d’atténuer la falsification de requête intersites (CSRF, Cross Site Request Forgery). À l’origine, il s’agissait d’une fonction à laquelle les serveurs devaient adhérer en ajoutant les nouveaux paramètres.
SameSite
est pris en charge à partir d’ASP.NET Core 2.0.
Nouveau comportement
Google a proposé une nouveau projet de norme qui n’est pas rétrocompatible. La norme modifie le mode par défaut sur Lax
et ajoute une nouvelle entrée None
pour refuser. Lax
suffit pour la plupart des cookies d’application. Toutefois, il arrête les scénarios intersites comme OpenID Connect et la connexion WS-Federation. La plupart des connexions OAuth ne sont pas affectées en raison de différences de traitement des flux de requêtes. Le nouveau paramètre None
provoque des problèmes de compatibilité avec les clients qui ont implémenté le projet de norme précédent (par exemple, iOS 12). Les changements seront inclus dans Chrome 80. Consultez les mises à jour de SameSite dans le cadre de la chronologie des lancements de produits Chrome.
ASP.NET Core 3.1 a été mis à jour pour implémenter le nouveau comportement SameSite
. La mise à jour redéfinit le comportement de SameSiteMode.None
afin d’émettre SameSite=None
et ajoute une nouvelle valeur, SameSiteMode.Unspecified
, afin d’omettre l’attribut SameSite
. Toutes les API de cookie sont désormais définies par défaut sur Unspecified
bien que certains composants qui utilisent des cookies définissent des valeurs plus spécifiques à leurs scénarios tels que la corrélation OpenID Connect et les cookies nonce.
Pour obtenir d’autres changements récents dans cette zone, consultez HTTP : Certaines valeurs par défaut du cookie SameSite ont été remplacées par Aucune. Dans ASP.NET Core 3.0, la plupart des valeurs par défaut sont passées de SameSiteMode.Lax à SameSiteMode.None (mais elles utilisent toujours la norme précédente).
Raison du changement
Le navigateur et la spécification changent comme indiqué dans le texte précédent.
Action recommandée
Les applications qui interagissent avec des sites distants, par le biais d’une connexion tierce, par exemple, doivent :
- Tester ces scénarios sur plusieurs navigateurs.
- Appliquer l’atténuation de la détection de l’Explorateur de stratégies de cookies décrite dans Prendre en charge les navigateurs plus anciens.
Pour obtenir des instructions de test et de détection de navigateur, consultez la section suivante.
Déterminer si vous êtes affecté
Tester votre application web à l’aide d’une version cliente qui peut opter pour le nouveau comportement. Chrome, Firefox et Microsoft Edge Chromium ont tous de nouveaux indicateurs de fonctionnalité d’acceptation qui peuvent être utilisés pour les tests. Vérifiez que votre application est compatible avec les versions antérieures du client après avoir appliqué les patches, en particulier Safari. Pour plus d’informations, consultez Prendre en charge les navigateurs plus anciens.
Chrome
Chrome 78 et les versions ultérieures produisent des résultats de test trompeurs. Ces versions ont mis en place une mesure d’atténuation temporaire et autorisent les cookies de moins de deux minutes. Avec les indicateurs de test appropriés activés, Chrome 76 et 77 donnent des résultats plus précis. Pour tester le nouveau comportement, activez chrome://flags/#same-site-by-default-cookies
sur activé. Chrome 75 et versions antérieures échouent avec le nouveau paramètre None
. Pour plus d’informations, consultez Prendre en charge les navigateurs plus anciens.
Google ne met pas à disposition les anciennes versions de Chrome. Toutefois, vous pouvez télécharger des versions antérieures de Chromium, ce qui suffit pour les tests. Suivez les instructions sur Télécharger Chromium.
Safari
Safari 12 a strictement implémenté le brouillon précédent et échoue s’il rencontre la nouvelle valeur None
dans les cookies. Cela doit être évité via le code de détection du navigateur indiqué dans Prendre en charge les navigateurs plus anciens. Veillez à tester Safari 12 et 13, ainsi que les connexions de type système d’exploitation basées sur WebKit à l’aide de Microsoft Authentication Library (MSAL), d’Active Directory Authentication Library (ADAL) ou de toute autre bibliothèque que vous utilisez. Le problème dépend de la version sous-jacente du système d’exploitation. OSX Mojave 10.14 et iOS 12 sont connus pour avoir des problèmes de compatibilité avec le nouveau comportement. La mise à niveau vers OSX Catalina 10.15 ou iOS 13 résout le problème. Safari n’a actuellement pas d’indicateur d’adhésion pour tester le nouveau comportement de spécification.
Firefox
La prise en charge de Firefox pour la nouvelle norme peut être testée sur la version 68 et ultérieure en acceptant sur la page about:config
avec l’indicateur de fonctionnalité network.cookie.sameSite.laxByDefault
. Aucun problème de compatibilité n’a été signalé sur les versions antérieures de Firefox.
Microsoft Edge
Bien que Microsoft Edge prenne en charge l’ancienne norme SameSite
, à partir de la version 44, il n’a pas rencontré de problèmes de compatibilité avec la nouvelle norme.
Microsoft Edge Chromium
L’indicateur de fonctionnalité est edge://flags/#same-site-by-default-cookies
. Aucun problème de compatibilité n’a été observé lors du test avec Microsoft Edge Chromium 78.
Électron
Les versions d’Electron incluent des versions antérieures de Chromium. Par exemple, la version d’Electron utilisée par Microsoft Teams est Chromium 66, qui présente l’ancien comportement. Effectuez vos propres tests de compatibilité avec la version d’Electron utilisée par votre produit. Pour plus d’informations, consultez Prendre en charge les navigateurs plus anciens.
Prendre en charge des navigateurs plus anciens
La norme SameSite
2016 exigeait que les valeurs inconnues soient traitées comme des valeurs SameSite=Strict
. Par conséquent, tous les navigateurs plus anciens qui prennent en charge la norme d’origine peuvent s’arrêter lorsqu’ils rencontrent une propriété SameSite
ayant la valeur None
. Les applications web doivent implémenter la détection de navigateur si elles doivent prendre en charge ces anciens navigateurs. ASP.NET Core n’implémente pas la détection de navigateur pour vous, car les valeurs d’en-tête de demande User-Agent
sont hautement instables et modifiées chaque semaine. Au lieu de cela, un point d’extension dans la stratégie de cookie vous permet d’ajouter une logique propre à User-Agent
.
Dans Startup.cs, ajoutez le code suivant :
private void CheckSameSite(HttpContext httpContext, CookieOptions options)
{
if (options.SameSite == SameSiteMode.None)
{
var userAgent = httpContext.Request.Headers["User-Agent"].ToString();
// TODO: Use your User Agent library of choice here.
if (/* UserAgent doesn't support new behavior */)
{
options.SameSite = SameSiteMode.Unspecified;
}
}
}
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.MinimumSameSitePolicy = SameSiteMode.Unspecified;
options.OnAppendCookie = cookieContext =>
CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
options.OnDeleteCookie = cookieContext =>
CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
});
}
public void Configure(IApplicationBuilder app)
{
// Before UseAuthentication or anything else that writes cookies.
app.UseCookiePolicy();
app.UseAuthentication();
// code omitted for brevity
}
Commutateurs de refus
Le commutateur de compatibilité Microsoft.AspNetCore.SuppressSameSiteNone
vous permet de désactiver temporairement le nouveau comportement de cookie ASP.NET Core. Ajoutez le code JSON suivant à un fichier runtimeconfig.template.json dans votre projet :
{
"configProperties": {
"Microsoft.AspNetCore.SuppressSameSiteNone": "true"
}
}
Autres versions
Les patches SameSite
connexes sont à venir pour :
- ASP.NET Core 2.1, 2.2 et 3.0
-
Microsoft.Owin
4.1 -
System.Web
(pour .NET Framework 4.7.2 et versions ultérieures)
Catégorie
ASP.NET
API affectées
- Microsoft.AspNetCore.Builder.CookiePolicyOptions.MinimumSameSitePolicy
- Microsoft.AspNetCore.Http.CookieBuilder.SameSite
- Microsoft.AspNetCore.Http.CookieOptions.SameSite
- Microsoft.AspNetCore.Http.SameSiteMode
- Microsoft.Net.Http.Headers.SameSiteMode
- Microsoft.Net.Http.Headers.SetCookieHeaderValue.SameSite
ASP.NET Core 3.0
Les API Antiforgery, CORS, Diagnostics, MVC et Routage obsolètes ont été supprimées
Les membres et les commutateurs de compatibilité obsolètes dans ASP.NET Core 2.2 ont été supprimés.
Version introduite
3.0
Raison du changement
Amélioration de la surface de l’API au fil du temps.
Action recommandée
Tout en ciblant .NET Core 2.2, suivez les instructions des messages de build obsolètes pour adopter de nouvelles API à la place.
Catégorie
ASP.NET Noyau
API affectées
Les types et membres suivants ont été marqués comme obsolètes pour ASP.NET Core 2.1 et 2.2 :
Types
Microsoft.AspNetCore.Diagnostics.Views.WelcomePage
Microsoft.AspNetCore.DiagnosticsViewPage.Views.AttributeValue
Microsoft.AspNetCore.DiagnosticsViewPage.Views.BaseView
Microsoft.AspNetCore.DiagnosticsViewPage.Views.HelperResult
Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetails21Wrapper
Microsoft.AspNetCore.Mvc.Formatters.Xml.ValidationProblemDetails21Wrapper
Microsoft.AspNetCore.Mvc.Razor.Compilation.ViewsFeatureProvider
Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageArgumentBinder
Microsoft.AspNetCore.Routing.IRouteValuesAddressMetadata
Microsoft.AspNetCore.Routing.RouteValuesAddressMetadata
Constructeurs
Microsoft.AspNetCore.Cors.Infrastructure.CorsService(IOptions{CorsOptions})
Microsoft.AspNetCore.Routing.Tree.TreeRouteBuilder(ILoggerFactory,UrlEncoder,ObjectPool{UriBuildingContext},IInlineConstraintResolver)
Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext
Microsoft.AspNetCore.Mvc.ApiExplorer.DefaultApiDescriptionProvider(IOptions{MvcOptions},IInlineConstraintResolver,IModelMetadataProvider)
Microsoft.AspNetCore.Mvc.ApiExplorer.DefaultApiDescriptionProvider(IOptions{MvcOptions},IInlineConstraintResolver,IModelMetadataProvider,IActionResultTypeMapper)
Microsoft.AspNetCore.Mvc.Formatters.FormatFilter(IOptions{MvcOptions})
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder`1(IModelBinder)
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ByteArrayModelBinder
- Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder'1(IModelBinder)
- Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder(IDictionary'2)
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder`2(IModelBinder,IModelBinder)
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DoubleModelBinder(System.Globalization.NumberStyles)
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FloatModelBinder(System.Globalization.NumberStyles)
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormCollectionModelBinder
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormFileModelBinder
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.HeaderModelBinder
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.KeyValuePairModelBinder`2(IModelBinder,IModelBinder)
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.SimpleTypeModelBinder(System.Type)
Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes(IEnumerable{System.Object})
Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes(IEnumerable{System.Object},IEnumerable{System.Object})
Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactory(IModelMetadataProvider,IOptions{MvcOptions})
Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder(IModelMetadataProvider,IModelBinderFactory,IObjectModelValidator)
- Microsoft.AspNetCore.Mvc.Routing.KnownRouteValueConstraint()
Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter
Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter(System.Boolean)
Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter(MvcOptions)
Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter
Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter(System.Boolean)
Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter(MvcOptions)
- Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper(IHostingEnvironment,IMemoryCache,HtmlEncoder,IUrlHelperFactory)
Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper(IHostingEnvironment,IMemoryCache,HtmlEncoder,JavaScriptEncoder,IUrlHelperFactory)
Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper(IHostingEnvironment,IMemoryCache,HtmlEncoder,JavaScriptEncoder,IUrlHelperFactory)
Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter(RazorPageBase)
Propriétés
Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.CookieDomain
Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.CookieName
Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.CookiePath
Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.RequireSsl
Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.AllowInferringBindingSourceForCollectionTypesAsFromQuery
Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressUseValidationProblemDetailsForInvalidModelStateResponses
Microsoft.AspNetCore.Mvc.CookieTempDataProviderOptions.CookieName
Microsoft.AspNetCore.Mvc.CookieTempDataProviderOptions.Domain
Microsoft.AspNetCore.Mvc.CookieTempDataProviderOptions.Path
Microsoft.AspNetCore.Mvc.DataAnnotations.MvcDataAnnotationsLocalizationOptions.AllowDataAnnotationsLocalizationForEnumDisplayAttributes
Microsoft.AspNetCore.Mvc.Formatters.Xml.MvcXmlOptions.AllowRfc7807CompliantProblemDetailsFormat
Microsoft.AspNetCore.Mvc.MvcOptions.AllowBindingHeaderValuesToNonStringModelTypes
Microsoft.AspNetCore.Mvc.MvcOptions.AllowCombiningAuthorizeFilters
Microsoft.AspNetCore.Mvc.MvcOptions.AllowShortCircuitingValidationWhenNoValidatorsArePresent
Microsoft.AspNetCore.Mvc.MvcOptions.AllowValidatingTopLevelNodes
Microsoft.AspNetCore.Mvc.MvcOptions.InputFormatterExceptionPolicy
Microsoft.AspNetCore.Mvc.MvcOptions.SuppressBindingUndefinedValueToEnumType
Microsoft.AspNetCore.Mvc.MvcViewOptions.AllowRenderingMaxLengthAttribute
Microsoft.AspNetCore.Mvc.MvcViewOptions.SuppressTempDataAttributePrefix
Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.AllowAreas
Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.AllowDefaultHandlingForOptionsRequests
Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.AllowMappingHeadRequestsToGetHandler
Méthodes
Microsoft.AspNetCore.Mvc.LocalRedirectResult.ExecuteResult(ActionContext)
Microsoft.AspNetCore.Mvc.RedirectResult.ExecuteResult(ActionContext)
Microsoft.AspNetCore.Mvc.RedirectToActionResult.ExecuteResult(ActionContext)
Microsoft.AspNetCore.Mvc.RedirectToPageResult.ExecuteResult(ActionContext)
Microsoft.AspNetCore.Mvc.RedirectToRouteResult.ExecuteResult(ActionContext)
Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.BindModelAsync(ActionContext,IValueProvider,ParameterDescriptor)
- Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.BindModelAsync(ActionContext,IValueProvider,ParameterDescriptor,Object)
Authentification : Google+ déconseillé et remplacé
Google a commencé à supprimer les connexions Google+ pour les applications dès le 28 janvier 2019.
Description de la modification
ASP.NET 4.x et ASP.NET Core ont utilisé les API de connexion Google+ pour authentifier les utilisateurs de compte Google dans les applications web. Les packages NuGet concernés sont Microsoft.AspNetCore.Authentication.Google pour ASP.NET Core et Microsoft.Owin.Security.Google pour Microsoft.Owin
avec ASP.NET Web Forms et MVC.
Les API de remplacement de Google utilisent une source de données et un format différents. Les atténuations et les solutions fournies ci-dessous expliquent les changements structurels. Les applications doivent vérifier que les données elles-mêmes répondent toujours à leurs besoins. Par exemple, les noms, les adresses e-mail, les liens de profil et les photos de profil peuvent fournir des valeurs subtilement différentes de celles d’avant.
Version introduite
Toutes les versions. Ce changement est externe à ASP.NET Core.
Action recommandée
Owin avec ASP.NET Web Forms et MVC
Pour Microsoft.Owin
la version 3.1.0 et ultérieure, une atténuation temporaire est décrite dans les impacts de l’arrêt Google+. Les applications doivent terminer le test d’atténuation pour vérifier les changements apportés au format de données. Il est prévu de mettre en production la version Microsoft.Owin
4.0.1 avec un correctif. Les applications utilisant une version antérieure doivent être mises à jour vers la version 4.0.1.
ASP.NET Core 1.x
L’atténuation dans Owin avec ASP.NET Web Forms et MVC peut être adaptée à ASP.NET Core 1.x. Les patches de packages NuGet ne sont pas prévus, car la version 1.x a atteint l’état de fin de vie.
ASP.NET Core 2.x
Pour Microsoft.AspNetCore.Authentication.Google
version 2.x, remplacez votre appel existant à AddGoogle
dans Startup.ConfigureServices
par le code suivant :
.AddGoogle(o =>
{
o.ClientId = Configuration["Authentication:Google:ClientId"];
o.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
o.UserInformationEndpoint = "https://www.googleapis.com/oauth2/v2/userinfo";
o.ClaimActions.Clear();
o.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "id");
o.ClaimActions.MapJsonKey(ClaimTypes.Name, "name");
o.ClaimActions.MapJsonKey(ClaimTypes.GivenName, "given_name");
o.ClaimActions.MapJsonKey(ClaimTypes.Surname, "family_name");
o.ClaimActions.MapJsonKey("urn:google:profile", "link");
o.ClaimActions.MapJsonKey(ClaimTypes.Email, "email");
});
Les patches 2.1 et 2.2 de février ont incorporé la reconfiguration précédente comme nouvelle valeur par défaut. Aucun patch n’est prévu pour ASP.NET Core 2.0 depuis sa fin de vie.
ASP.NET Core 3.0
L’atténuation donnée pour ASP.NET Core 2.x peut également être utilisée pour ASP.NET Core 3.0. Dans les prochaines préversions 3.0, le package Microsoft.AspNetCore.Authentication.Google
peut être supprimé. À la place, les utilisateurs sont dirigés vers Microsoft.AspNetCore.Authentication.OpenIdConnect
. Le code suivant montre comment remplacer AddGoogle
par AddOpenIdConnect
dans Startup.ConfigureServices
. Ce remplacement peut être utilisé avec ASP.NET Core 2.0 et versions ultérieures et peut être adapté pour ASP.NET Core 1.x si nécessaire.
.AddOpenIdConnect("Google", o =>
{
o.ClientId = Configuration["Authentication:Google:ClientId"];
o.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
o.Authority = "https://accounts.google.com";
o.ResponseType = OpenIdConnectResponseType.Code;
o.CallbackPath = "/signin-google"; // Or register the default "/signin-oidc"
o.Scope.Add("email");
});
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
Catégorie
ASP.NET Noyau
API affectées
Microsoft.AspNetCore.Authentication.Google
Authentication : propriété HttpContext.Authentication supprimée
La propriété Authentication
déconseillée sur HttpContext
a été supprimée.
Description de la modification
Dans le cadre de dotnet/aspnetcore#6504, la propriété Authentication
déconseillée sur HttpContext
a été supprimée. La propriété Authentication
est déconseillée depuis 2.0. Un guide de migration a été publié pour migrer le code à l’aide de cette propriété déconseillée vers les nouvelles API de remplacement. Les classes/API inutilisées restantes liées à l’ancienne pile d’authentification ASP.NET Core 1.x ont été supprimées dans la validation dotnet/aspnetcore@d7a7c65.
Pour plus d’informations, consultez dotnet/aspnetcore#6533.
Version introduite
3.0
Raison du changement
Les API ASP.NET Core 1.0 ont été remplacées par des méthodes d’extension dans Microsoft.AspNetCore.Authentication.AuthenticationHttpContextExtensions.
Action recommandée
Consultez le guide de migration.
Catégorie
ASP.NET Noyau
API affectées
- Microsoft.AspNetCore.Http.Authentication.AuthenticateInfo
- Microsoft.AspNetCore.Http.Authentication.AuthenticationManager
- Microsoft.AspNetCore.Http.Authentication.AuthenticationProperties
- Microsoft.AspNetCore.Http.Features.Authentication.AuthenticateContext
- Microsoft.AspNetCore.Http.Features.Authentication.ChallengeBehavior
- Microsoft.AspNetCore.Http.Features.Authentication.ChallengeContext
- Microsoft.AspNetCore.Http.Features.Authentication.DescribeSchemesContext
- Microsoft.AspNetCore.Http.Features.Authentication.IAuthenticationHandler
- Microsoft.AspNetCore.Http.Features.Authentication.IHttpAuthenticationFeature.Handler
- Microsoft.AspNetCore.Http.Features.Authentication.SignInContext
- Microsoft.AspNetCore.Http.Features.Authentication.SignOutContext
- Microsoft.AspNetCore.Http.HttpContext.Authentication
Authentification : types Newtonsoft.Json remplacés
Dans ASP.NET Core 3.0, les types Newtonsoft.Json
utilisés dans les API d’authentification ont été remplacés par des types System.Text.Json
. Sauf dans les cas suivants, l’utilisation de base des packages d’authentification n’est pas affectée :
- Classes dérivées des fournisseurs OAuth, telles que celles d’aspnet-contrib.
- Implémentations avancées de manipulation des revendications.
Pour plus d’informations, consultez dotnet/aspnetcore#7105. Pour plus d’informations, consultez dotnet/aspnetcore#7289.
Version introduite
3.0
Action recommandée
Pour les implémentations OAuth dérivées, le changement le plus courant consiste à remplacer JObject.Parse
par JsonDocument.Parse
dans la substitution CreateTicketAsync
, comme indiqué dans dotnet/aspnetcore#7105. L'objet JsonDocument
implémente l'objet IDisposable
.
La liste suivante présente les changements connus :
-
ClaimAction.Run(JObject, ClaimsIdentity, String) devient
ClaimAction.Run(JsonElement userData, ClaimsIdentity identity, string issuer)
. Toutes les implémentations dérivées deClaimAction
sont affectées de la même façon. -
ClaimActionCollectionMapExtensions.MapCustomJson(ClaimActionCollection, String, Func<JObject,String>) devient
MapCustomJson(this ClaimActionCollection collection, string claimType, Func<JsonElement, string> resolver)
-
ClaimActionCollectionMapExtensions.MapCustomJson(ClaimActionCollection, String, String, Func<JObject,String>) devient
MapCustomJson(this ClaimActionCollection collection, string claimType, string valueType, Func<JsonElement, string> resolver)
-
OAuthCreatingTicketContext a eu un ancien constructeur supprimé et l’autre a été remplacé
JObject
parJsonElement
. La propriétéUser
et la méthodeRunClaimActions
ont été mises à jour pour correspondre. -
Success(JObject) accepte maintenant un paramètre de type
JsonDocument
au lieu deJObject
. La propriétéResponse
a été mise à jour pour correspondre.OAuthTokenResponse
est maintenant jetable et sera éliminé parOAuthHandler
. Les implémentations OAuth dérivées remplaçantExchangeCodeAsync
n’ont pas besoin de supprimer leJsonDocument
ouOAuthTokenResponse
. -
UserInformationReceivedContext.User passé de
JObject
àJsonDocument
. -
TwitterCreatingTicketContext.User passé de
JObject
àJsonElement
. - Le dernier paramètre de TwitterHandler.CreateTicketAsync(ClaimsIdentity,AuthenticationProperties,AccessToken,JObject) est passé de
JObject
àJsonElement
. La méthode de remplacement est TwitterHandler.CreateTicketAsync(ClaimsIdentity, AuthenticationProperties, AccessToken, JsonElement).
Catégorie
ASP.NET Noyau
API affectées
- Microsoft.AspNetCore.Authentication.Facebook
- Microsoft.AspNetCore.Authentication.Google
- Microsoft.AspNetCore.Authentication.MicrosoftAccount
- Microsoft.AspNetCore.Authentication.OAuth
- Microsoft.AspNetCore.Authentication.OpenIdConnect
- Microsoft.AspNetCore.Authentication.Twitter
Authentification : la signature OAuthHandler ExchangeCodeAsync a été modifiée
Dans ASP.NET Core 3.0, la signature de OAuthHandler.ExchangeCodeAsync
est passé de :
protected virtual System.Threading.Tasks.Task<Microsoft.AspNetCore.Authentication.OAuth.OAuthTokenResponse> ExchangeCodeAsync(string code, string redirectUri) { throw null; }
Par :
protected virtual System.Threading.Tasks.Task<Microsoft.AspNetCore.Authentication.OAuth.OAuthTokenResponse> ExchangeCodeAsync(Microsoft.AspNetCore.Authentication.OAuth.OAuthCodeExchangeContext context) { throw null; }
Version introduite
3.0
Ancien comportement
Les chaînes code
et redirectUri
ont été passées en tant qu’arguments distincts.
Nouveau comportement
Code
et RedirectUri
sont des propriétés sur OAuthCodeExchangeContext
qui peuvent être définies via le constructeur OAuthCodeExchangeContext
. Le nouveau type OAuthCodeExchangeContext
est le seul argument passé à OAuthHandler.ExchangeCodeAsync
.
Raison du changement
Ce changement permet de fournir des paramètres supplémentaires sans rupture. Il n’est pas nécessaire de créer de nouvelles surcharges ExchangeCodeAsync
.
Action recommandée
Construisez un OAuthCodeExchangeContext
avec les valeurs code
et redirectUri
appropriées. Une instance AuthenticationProperties doit être fournie. Cette instance OAuthCodeExchangeContext
unique peut être passée à OAuthHandler.ExchangeCodeAsync
au lieu de plusieurs arguments.
Catégorie
ASP.NET Noyau
API affectées
OAuthHandler<TOptions>.ExchangeCodeAsync(String, String)
Autorisation : la surcharge AddAuthorization a été déplacée vers un autre assembly
Les méthodes principales AddAuthorization
utilisées pour résider dans Microsoft.AspNetCore.Authorization
ont été renommées en AddAuthorizationCore
. Les anciennes méthodes AddAuthorization
existent toujours, mais se trouvent dans l’assembly Microsoft.AspNetCore.Authorization.Policy
à la place. Les applications utilisant les deux méthodes ne doivent voir aucun impact. Notez que Microsoft.AspNetCore.Authorization.Policy
est désormais fourni dans l’infrastructure partagée plutôt qu’un package autonome, comme indiqué dans Infrastructure partagée : Assemblys supprimés de Microsoft.AspNetCore.App.
Version introduite
3.0
Ancien comportement
Les méthodes AddAuthorization
existaient dans Microsoft.AspNetCore.Authorization
.
Nouveau comportement
Les méthodes AddAuthorization
existent dans Microsoft.AspNetCore.Authorization.Policy
.
AddAuthorizationCore
est le nouveau nom des anciennes méthodes.
Raison du changement
AddAuthorization
est un meilleur nom de méthode pour l’ajout de tous les services communs nécessaires à l’autorisation.
Action recommandée
Ajoutez une référence à Microsoft.AspNetCore.Authorization.Policy
ou utilisez AddAuthorizationCore
à la place.
Catégorie
ASP.NET Noyau
API affectées
Autorisation : IAllowAnonymous supprimé de AuthorizationFilterContext.Filters
Depuis ASP.NET Core 3.0, MVC n’ajoute pas les attributs AllowAnonymousFilters pour pour [AllowAnonymous] qui ont été découverts sur les contrôleurs et les méthodes d’action. Ce changement est traité localement pour les dérivés de AuthorizeAttribute, mais il s’agit d’un changement cassant pour les implémentations IAsyncAuthorizationFilter et IAuthorizationFilter. Ces implémentations inclues dans un wrapper dans un attribut [TypeFilter] sont un moyen populaire et pris en charge d’obtenir une autorisation fortement typée basée sur les attributs lorsque la configuration et l’injection de dépendances sont requises.
Version introduite
3.0
Ancien comportement
IAllowAnonymous est apparu dans la collection AuthorizationFilterContext.Filters. Le test de la présence de l’interface était une approche valide pour remplacer ou désactiver le filtre sur les méthodes de contrôleur individuelles.
Nouveau comportement
IAllowAnonymous
n’apparaît plus dans la collection AuthorizationFilterContext.Filters
. Les implémentations IAsyncAuthorizationFilter
qui dépendent de l’ancien comportement provoquent généralement des réponses HTTP 401 non autorisées ou HTTP 403 Interdites intermittentes.
Raison du changement
Une nouvelle stratégie de routage des points de terminaison a été introduite dans ASP.NET Core 3.0.
Action recommandée
Recherchez dans les métadonnées du point de terminaison pour IAllowAnonymous
. Par exemple :
var endpoint = context.HttpContext.GetEndpoint();
if (endpoint?.Metadata?.GetMetadata<IAllowAnonymous>() != null)
{
}
Un exemple de cette technique est présenté dans cette méthode HasAllowAnonymous.
Catégorie
ASP.NET Noyau
API affectées
Aucun
Autorisation : les implémentations IAuthorizationPolicyProvider nécessitent une nouvelle méthode
Dans ASP.NET Core 3.0, une nouvelle méthode GetFallbackPolicyAsync
a été ajoutée à IAuthorizationPolicyProvider
. Cette stratégie de secours est utilisée par l’intergiciel d’autorisation lorsqu’aucune stratégie n’est spécifiée.
Pour plus d’informations, consultez dotnet/aspnetcore#9759.
Version introduite
3.0
Ancien comportement
Les implémentations de IAuthorizationPolicyProvider
n’ont pas besoin d’une méthode GetFallbackPolicyAsync
.
Nouveau comportement
Les implémentations de IAuthorizationPolicyProvider
ont besoin d’une méthode GetFallbackPolicyAsync
.
Raison du changement
Une nouvelle méthode était nécessaire pour être utilisée par le nouveau AuthorizationMiddleware
lorsqu’aucune stratégie n’est spécifiée.
Action recommandée
Ajoutez la méthode GetFallbackPolicyAsync
à vos implémentations de IAuthorizationPolicyProvider
.
Catégorie
ASP.NET Noyau
API affectées
Microsoft.AspNetCore.Authorization.IAuthorizationPolicyProvider
Mise en cache : propriété CompactOnMemoryPressure supprimée
La version ASP.NET Core 3.0 a supprimé les API MemoryCacheOptions obsolètes.
Description de la modification
Ce changement est un suivi de aspnet/Caching#221. Pour en savoir plus, consultez dotnet/extensions#1062.
Version introduite
3.0
Ancien comportement
La propriété MemoryCacheOptions.CompactOnMemoryPressure
était disponible.
Nouveau comportement
La propriété MemoryCacheOptions.CompactOnMemoryPressure
a été supprimée.
Raison du changement
Le compactage automatique du cache a provoqué des problèmes. Pour éviter tout comportement inattendu, le cache ne doit être compacté que si nécessaire.
Action recommandée
Pour compacter le cache, effectuez un downcast vers MemoryCache
et appelez Compact
si nécessaire.
Catégorie
ASP.NET Noyau
API affectées
MemoryCacheOptions.CompactOnMemoryPressure
Mise en cache : Microsoft.Extensions.Caching.SqlServer utilise le nouveau package SqlClient
Le package Microsoft.Extensions.Caching.SqlServer
utilisera le nouveau package Microsoft.Data.SqlClient
à la place du package System.Data.SqlClient
. Ce changement peut entraîner de légers changements cassants du comportement. Pour plus d’informations, consultez Présentation du nouveau Microsoft.Data.SqlClient.
Version introduite
3.0
Ancien comportement
Le package Microsoft.Extensions.Caching.SqlServer
a utilisé le package System.Data.SqlClient
.
Nouveau comportement
Microsoft.Extensions.Caching.SqlServer
utilise maintenant le package Microsoft.Data.SqlClient
.
Raison du changement
Microsoft.Data.SqlClient
est un nouveau package qui est généré à partir de System.Data.SqlClient
. C’est là que tout le travail des nouvelles fonctionnalités sera effectué à partir de maintenant.
Action recommandée
Les clients ne doivent pas avoir à s’inquiéter de ce changement cassant, sauf s’ils utilisent des types retournés par le package Microsoft.Extensions.Caching.SqlServer
et les castent en types System.Data.SqlClient
. Par exemple, si quelqu’un castait un DbConnection
vers l’ancien type SqlConnection, il doit remplacer le cast par le nouveau type Microsoft.Data.SqlClient.SqlConnection
.
Catégorie
ASP.NET Noyau
API affectées
Aucun
Mise en cache : les types « pubternal » ResponseCaching sont passés en interne
Dans ASP.NET Core 3.0, les types « pubternal » dans ResponseCaching
ont été modifiés en internal
.
En outre, les implémentations par défaut de IResponseCachingPolicyProvider
et IResponseCachingKeyProvider
ne sont plus ajoutées aux services dans le cadre de la méthode AddResponseCaching
.
Description de la modification
Dans ASP.NET Core, les types « pubternal » sont déclarés comme public
mais résident dans un espace de noms avec le suffixe .Internal
. Bien que ces types soient publics, ils n’ont aucune stratégie de support et sont sujets à des changements cassants. Malheureusement, l’utilisation accidentelle de ces types a été fréquente, ce qui a entraîné des changements cassants dans ces projets en limitant la capacité à gérer l’infrastructure.
Version introduite
3.0
Ancien comportement
Ces types étaient visibles publiquement, mais non pris en charge.
Nouveau comportement
Ces types sont désormais internal
.
Raison du changement
L’étendue internal
reflète mieux la stratégie non prise en charge.
Action recommandée
Copiez les types utilisés par votre application ou bibliothèque.
Catégorie
ASP.NET Noyau
API affectées
Microsoft.AspNetCore.ResponseCaching.Internal.CachedResponse
Microsoft.AspNetCore.ResponseCaching.Internal.CachedVaryByRules
Microsoft.AspNetCore.ResponseCaching.Internal.IResponseCache
Microsoft.AspNetCore.ResponseCaching.Internal.IResponseCacheEntry
Microsoft.AspNetCore.ResponseCaching.Internal.IResponseCachingKeyProvider
Microsoft.AspNetCore.ResponseCaching.Internal.IResponseCachingPolicyProvider
Microsoft.AspNetCore.ResponseCaching.Internal.MemoryResponseCache
Microsoft.AspNetCore.ResponseCaching.Internal.ResponseCachingContext
Microsoft.AspNetCore.ResponseCaching.Internal.ResponseCachingKeyProvider
Microsoft.AspNetCore.ResponseCaching.Internal.ResponseCachingPolicyProvider
- Microsoft.AspNetCore.ResponseCaching.ResponseCachingMiddleware.ResponseCachingMiddleware(RequestDelegate, IOptions<ResponseCachingOptions>, ILoggerFactory, IResponseCachingPolicyProvider, IResponseCache, IResponseCachingKeyProvider)
Protection des données : DataProtection.Blobs utilise de nouvelles API de stockage Azure
Azure.Extensions.AspNetCore.DataProtection.Blobs
dépend des bibliothèques de stockage Azure. Ces bibliothèques ont renommé leurs assemblys, packages et espaces de noms. À compter de ASP.NET Core 3.0, Azure.Extensions.AspNetCore.DataProtection.Blobs
utilise les nouveaux packages et API avec le préfixe Azure.Storage.
.
Pour toute question sur les API de stockage Azure, utilisez https://github.com/Azure/azure-storage-net. Pour plus d’informations sur ce problème, consultez dotnet/aspnetcore#19570.
Version introduite
3.0
Ancien comportement
Le package a référencé le package NuGet WindowsAzure.Storage
.
Le package référence le package NuGet Microsoft.Azure.Storage.Blob
.
Nouveau comportement
Le package référence le package NuGet Azure.Storage.Blob
.
Raison du changement
Ce changement permet à Azure.Extensions.AspNetCore.DataProtection.Blobs
de migrer vers les packages de stockage Azure recommandés.
Action recommandée
Si vous devez toujours utiliser les plus anciennes API de stockage Azure avec ASP.NET Core 3.0, ajoutez une dépendance directe au package WindowsAzure.Storage ou Microsoft.Azure.Storage. Ce package peut être installé en même temps que les nouvelles API Azure.Storage
.
Dans de nombreux cas, la mise à niveau implique uniquement le changement des instructions using
pour utiliser les nouveaux espaces de noms :
- using Microsoft.WindowsAzure.Storage;
- using Microsoft.WindowsAzure.Storage.Blob;
- using Microsoft.Azure.Storage;
- using Microsoft.Azure.Storage.Blob;
+ using Azure.Storage;
+ using Azure.Storage.Blobs;
Catégorie
ASP.NET Noyau
API affectées
Aucun
Hébergement : AspNetCoreModule V1 supprimé de l’offre groupée d’hébergement Windows
À compter de ASP.NET Core 3.0, l’offre groupée d’hébergement Windows ne contiendra pas AspNetCoreModule (ANCM) V1.
ANCM V2 est rétrocompatible avec ANCM OutOfProcess et est recommandé pour une utilisation avec des applications ASP.NET Core 3.0.
Pour plus d’informations, consultez dotnet/aspnetcore#7095.
Version introduite
3.0
Ancien comportement
ANCM V1 est inclus dans l’offre groupée d’hébergement Windows.
Nouveau comportement
ANCM V1 n’est pas inclus dans l’offre groupée d’hébergement Windows.
Raison du changement
ANCM V2 est rétrocompatible avec ANCM OutOfProcess et est recommandé pour une utilisation avec des applications ASP.NET Core 3.0.
Action recommandée
Utilisez ANCM V2 avec des applications ASP.NET Core 3.0.
Si ANCM V1 est requis, il peut être installé à l’aide de l’offre groupée d’hébergement Windows ASP.NET Core 2.1 ou 2.2.
Ce changement arrête les applications ASP.NET Core 3.0 qui :
- ont explicitement opté pour l’utilisation d’ANCM V1 avec
<AspNetCoreModuleName>AspNetCoreModule</AspNetCoreModuleName>
; - ont un fichier web.config personnalisé avec
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
.
Catégorie
ASP.NET Noyau
API affectées
Aucun
Hébergement : l’hôte générique restreint l’injection de constructeur de démarrage
Les seuls types pris en charge par l’hôte générique pour l’injection de constructeur de classe Startup
sont IHostEnvironment
, IWebHostEnvironment
et IConfiguration
. Les applications utilisant WebHost
ne sont pas affectées.
Description de la modification
Avant ASP.NET Core 3.0, l’injection de constructeur pouvait être utilisée pour des types arbitraires dans le constructeur de la classe Startup
. Dans ASP.NET Core 3.0, la pile web a été placée sur une nouvelle plateforme sur la bibliothèque hôte générique. Vous pouvez voir le changement dans le fichier Program.cs des modèles :
ASP.NET Core 2.x :
ASP.NET Core 3.0 :
Host
utilise un conteneur d’injection de dépendances (ID) pour générer l’application.
WebHost
utilise deux conteneurs : un pour l’hôte et un autre pour l’application. Par conséquent, le constructeur Startup
ne prend plus en charge l’injection de service personnalisé. Seuls IHostEnvironment
, IWebHostEnvironment
et IConfiguration
peuvent être injectés. Ce changement permet d’éviter les problèmes de l’ID, tels que la création d’un doublon d’un service singleton.
Version introduite
3.0
Raison du changement
Ce changement est une conséquence du placement sur une nouvelle plateforme de la pile web sur la bibliothèque hôte générique.
Action recommandée
Injectez des services dans la signature de la méthode Startup.Configure
. Par exemple :
public void Configure(IApplicationBuilder app, IOptions<MyOptions> options)
Catégorie
ASP.NET Noyau
API affectées
Aucun
Hébergement : redirection HTTPS activée pour les applications hors processus IIS
La version 13.0.19218.0 du module ASP.NET Core (ANCM) pour l’hébergement via IIS hors processus active une fonctionnalité de redirection HTTPS existante pour les applications ASP.NET Core 3.0 et 2.2.
Pour plus d’informations, consultez dotnet/aspnetcore#15243.
Version introduite
3.0
Ancien comportement
Le modèle de projet ASP.NET Core 2.1 a d’abord introduit le support des méthodes d’intergiciel HTTPS comme UseHttpsRedirection et UseHsts. L’activation de la redirection HTTPS nécessitait l’ajout d’une configuration, car les applications en cours de développement n’utilisent pas le port par défaut 443. La Sécurité du transport strict HTTP (HSTS) est active uniquement si la requête utilise déjà HTTPS. Localhost est ignoré par défaut.
Nouveau comportement
Dans ASP.NET Core 3.0, le scénario HTTPS IIS a été amélioré. Avec l’amélioration, une application peut découvrir les ports HTTPS du serveur et faire fonctionner UseHttpsRedirection
par défaut. Le composant in-process a effectué la découverte de ports avec la fonctionnalité IServerAddresses
, ce qui affecte uniquement les applications ASP.NET Core 3.0, car la bibliothèque in-process est versionnée avec l’infrastructure. Le composant hors processus a été modifié pour ajouter automatiquement la variable d’environnement ASPNETCORE_HTTPS_PORT
. Ce changement a affecté les applications ASP.NET Core 2.2 et 3.0, car le composant hors processus est partagé globalement. Les applications ASP.NET Core 2.1 ne sont pas affectées, car elles utilisent une version antérieure à ANCM par défaut.
Le comportement précédent a été modifié dans ASP.NET Core 3.0.1 et 3.1.0 Préversion 3 pour inverser les changements de comportement dans ASP.NET Core 2.x. Ces changements affectent uniquement les applications hors processus IIS.
Comme indiqué ci-dessus, l’installation de ASP.NET Core 3.0.0 a eu pour effet secondaire d’activer également l’intergiciel UseHttpsRedirection
dans les applications ASP.NET Core 2.x. Un changement a été apporté à ANCM dans ASP.NET Core 3.0.1 et 3.1.0 Préversion 3, de telle sorte que leur installation n’ait plus cet effet sur les applications ASP.NET Core 2.x. La variable d’environnement ASPNETCORE_HTTPS_PORT
qu’ANCM a renseignée dans ASP.NET Core 3.0.0 a été modifiée en ASPNETCORE_ANCM_HTTPS_PORT
dans ASP.NET Core 3.0.1 et 3.1.0 Préversion 3.
UseHttpsRedirection
a également été mis à jour dans ces versions pour comprendre les variables nouvelles et anciennes. ASP.NET Core 2.x ne sera pas mis à jour. Par conséquent, cela rétablit le comportement précédent de la désactivation par défaut.
Raison du changement
Amélioration de la fonctionnalité ASP.NET Core 3.0.
Action recommandée
Aucune action n’est requise si vous souhaitez que tous les clients utilisent HTTPS. Pour autoriser certains clients à utiliser HTTP, effectuez l’une des étapes suivantes :
Supprimez les appels vers
UseHttpsRedirection
etUseHsts
depuis la méthodeStartup.Configure
de votre projet, puis redéployez l’application.Dans votre fichier web.config, définissez la variable d’environnement
ASPNETCORE_HTTPS_PORT
sur une chaîne vide. Ce changement peut se produire directement sur le serveur sans redéployer l’application. Par exemple :<aspNetCore processPath="dotnet" arguments=".\WebApplication3.dll" stdoutLogEnabled="false" stdoutLogFile="\\?\%home%\LogFiles\stdout" > <environmentVariables> <environmentVariable name="ASPNETCORE_HTTPS_PORT" value="" /> </environmentVariables> </aspNetCore>
UseHttpsRedirection
peut toujours être :
- activé manuellement dans ASP.NET Core 2.x en définissant la variable d’environnement
ASPNETCORE_HTTPS_PORT
sur le numéro de port approprié (443 dans la plupart des scénarios de production) ; - désactivé dans ASP.NET Core 3.x en définissant
ASPNETCORE_ANCM_HTTPS_PORT
avec une valeur de chaîne vide. Cette valeur est définie de la même façon que dans l’exemple précédentASPNETCORE_HTTPS_PORT
.
Les machines exécutant des applications ASP.NET Core 3.0.0 doivent installer le runtime ASP.NET Core 3.0.1 avant d’installer l’ANCM ASP.NET Core 3.1.0 Préversion 3. Cela garantit que UseHttpsRedirection
continue de fonctionner comme prévu pour les applications ASP.NET Core 3.0.
Dans Azure App Service, ANCM se déploie selon une planification distincte du runtime en raison de sa nature globale. ANCM a été déployé sur Azure avec ces changements après le déploiement de ASP.NET Core 3.0.1 et 3.1.0.
Catégorie
ASP.NET Noyau
API affectées
HttpsPolicyBuilderExtensions.UseHttpsRedirection(IApplicationBuilder)
Hébergement : types IHostingEnvironment et IApplicationLifetime marqués comme obsolètes et remplacés
De nouveaux types ont été introduits pour remplacer les typesIHostingEnvironment
et IApplicationLifetime
existants.
Version introduite
3.0
Ancien comportement
Il y avait deux types IHostingEnvironment
et IApplicationLifetime
différents de Microsoft.Extensions.Hosting
et Microsoft.AspNetCore.Hosting
.
Nouveau comportement
Les anciens types ont été marqués comme obsolètes et remplacés par de nouveaux types.
Raison du changement
Lorsque Microsoft.Extensions.Hosting
a été introduit dans ASP.NET Core 2.1, certains types comme IHostingEnvironment
et IApplicationLifetime
ont été copiés à partir de Microsoft.AspNetCore.Hosting
. Certains changements de ASP.NET Core 3.0 entraînent l’inclusion des espaces de noms Microsoft.Extensions.Hosting
et Microsoft.AspNetCore.Hosting
par les applications. Toute utilisation de ces types en double provoque une erreur du compilateur « référence ambiguë » lorsque les deux espaces de noms sont référencés.
Action recommandée
Remplacement de toutes les utilisations des anciens types par les types nouvellement introduits comme ci-dessous :
Types obsolètes (avertissement) :
- Microsoft.Extensions.Hosting.IHostingEnvironment
- Microsoft.AspNetCore.Hosting.IHostingEnvironment
- Microsoft.Extensions.Hosting.IApplicationLifetime
- Microsoft.AspNetCore.Hosting.IApplicationLifetime
- Microsoft.Extensions.Hosting.EnvironmentName
- Microsoft.AspNetCore.Hosting.EnvironmentName
Nouveaux types :
- Microsoft.Extensions.Hosting.IHostEnvironment
Microsoft.AspNetCore.Hosting.IWebHostEnvironment : IHostEnvironment
- Microsoft.Extensions.Hosting.IHostApplicationLifetime
- Microsoft.Extensions.Hosting.Environments
Les nouvelles méthodes d’extension IHostEnvironment
IsDevelopment
et IsProduction
se trouvent dans l’espace de noms Microsoft.Extensions.Hosting
. Cet espace de noms doit peut-être être ajouté à votre projet.
Catégorie
ASP.NET Noyau
API affectées
- Microsoft.AspNetCore.Hosting.EnvironmentName
- Microsoft.AspNetCore.Hosting.IApplicationLifetime
- Microsoft.AspNetCore.Hosting.IHostingEnvironment
- Microsoft.Extensions.Hosting.EnvironmentName
- Microsoft.Extensions.Hosting.IApplicationLifetime
- Microsoft.Extensions.Hosting.IHostingEnvironment
Hébergement : ObjectPoolProvider supprimé des dépendances WebHostBuilder
Afin de rendre ASP.NET Core plus payant, le ObjectPoolProvider
a été supprimé de l’ensemble principal de dépendances. Des composants spécifiques qui s’appuient sur ObjectPoolProvider
l’ajoutent désormais eux-mêmes.
Pour plus d’informations, consultez dotnet/aspnetcore#5944.
Version introduite
3.0
Ancien comportement
WebHostBuilder
fournit ObjectPoolProvider
par défaut dans le conteneur de l’ID.
Nouveau comportement
WebHostBuilder
ne fournit plus ObjectPoolProvider
par défaut dans le conteneur de l’ID.
Raison du changement
Ce changement a été apporté pour rendre ASP.NET Core plus payant.
Action recommandée
Si votre composant nécessite ObjectPoolProvider
, il doit être ajouté à vos dépendances via le IServiceCollection
.
Catégorie
ASP.NET Noyau
API affectées
Aucun
HTTP : l’extensibilité DéfautHttpContext a été supprimée
Dans le cadre des améliorations du niveau de performance de ASP.NET Core 3.0, l’extensibilité de DefaultHttpContext
a été supprimée. La classe est maintenant sealed
. Pour plus d’informations, consultez dotnet/aspnetcore#6504.
Si vos tests unitaires utilisent Mock<DefaultHttpContext>
, utilisez Mock<HttpContext>
ou new DefaultHttpContext()
à la place.
Pour plus d’informations, consultez dotnet/aspnetcore#6534.
Version introduite
3.0
Ancien comportement
Les classes peuvent dériver de DefaultHttpContext
.
Nouveau comportement
Les classes ne peuvent pas dériver de DefaultHttpContext
.
Raison du changement
L’extensibilité a été initialement fournie pour permettre le regroupement du HttpContext
, mais elle a introduit une complexité inutile et entravé d’autres optimisations.
Action recommandée
Si vous utilisez Mock<DefaultHttpContext>
dans vos tests unitaires, commencez à utiliser Mock<HttpContext>
à la place.
Catégorie
ASP.NET Noyau
API affectées
Microsoft.AspNetCore.Http.DefaultHttpContext
HTTP : les constantes HeaderNames sont passées à des champs statiques en lecture seule
À compter de ASP.NET Core 3.0 Préversion 5, les champs dans Microsoft.Net.Http.Headers.HeaderNames sont passés de const
à static readonly
.
Pour plus d’informations, consultez dotnet/aspnetcore#9514.
Version introduite
3.0
Ancien comportement
Ces champs étaient const
auparavant.
Nouveau comportement
Ces champs sont désormais static readonly
.
Raison du changement
Changements :
- Empêche l’incorporation des valeurs au-delà des limites de l’assembly, ce qui permet des corrections de valeur en fonction des besoins.
- Permet des vérifications d’égalité des références plus rapides.
Action recommandée
Recompilez sur 3.0. Le code source utilisant ces champs des manières suivantes ne peut plus le faire :
- En tant qu’argument d’attribut
- En tant que
case
dans une instructionswitch
- Lors de la définition d’un autre
const
Pour contourner le changement cassant, basculez vers l’utilisation de constantes de noms d’en-tête autodéfinis ou de littéraux de chaîne.
Catégorie
ASP.NET Noyau
API affectées
Microsoft.Net.Http.Headers.HeaderNames
HTTP : changements de l’infrastructure du corps de la réponse
L’infrastructure qui supporte un corps de réponse HTTP a changé. Si vous utilisez HttpResponse
directement, vous n’avez pas besoin d’apporter de changements de code. Lisez plus en détail si vous incluez dans un wrapper ou remplacez HttpResponse.Body
ou si vous accédez à HttpContext.Features
.
Version introduite
3.0
Ancien comportement
Trois API étaient associées au corps de la réponse HTTP :
IHttpResponseFeature.Body
IHttpSendFileFeature.SendFileAsync
IHttpBufferingFeature.DisableResponseBuffering
Nouveau comportement
Si vous remplacez HttpResponse.Body
, il remplace IHttpResponseBodyFeature
en entier par un wrapper autour de votre flux donné à l’aide de StreamResponseBodyFeature
pour fournir des implémentations par défaut pour toutes les API attendues. La restauration du flux d’origine rétablit ce changement.
Raison du changement
La motivation est de combiner les API du corps de la réponse dans une nouvelle interface de fonctionnalité unique.
Action recommandée
Utilisez IHttpResponseBodyFeature
là où vous utilisiez IHttpResponseFeature.Body
, IHttpSendFileFeature
ou IHttpBufferingFeature
précédemment.
Catégorie
ASP.NET Noyau
API affectées
- Microsoft.AspNetCore.Http.Features.IHttpBufferingFeature
- Microsoft.AspNetCore.Http.Features.IHttpResponseFeature.Body
- Microsoft.AspNetCore.Http.Features.IHttpSendFileFeature
HTTP : Certaines valeurs par défaut du cookie SameSite ont été remplacées par Aucune
SameSite
est une option pour les cookies permettant d’atténuer certaines attaques de falsification de requête intersites (CSRF, Cross Site Request Forgery). Lors de l’introduction initiale de cette option, des valeurs par défaut incohérentes étaient utilisées dans différentes API ASP.NET Core. L’incohérence a conduit à des résultats confus. À partir de ASP.NET Core 3.0, ces valeurs par défaut sont mieux alignées. Vous devez choisir cette fonctionnalité par composant.
Version introduite
3.0
Ancien comportement
Des API similaires ASP.NET Core utilisaient des valeurs par défaut SameSiteMode différentes. Un exemple de l’incohérence est observé dans HttpResponse.Cookies.Append(String, String)
et HttpResponse.Cookies.Append(String, String, CookieOptions)
, qui ont respectivement la valeur par défaut SameSiteMode.None
et SameSiteMode.Lax
.
Nouveau comportement
La valeur par défaut de toutes les API affectées est SameSiteMode.None
.
Raison du changement
La valeur par défaut a été modifiée pour faire de SameSite
une fonctionnalité d’activation.
Action recommandée
Chaque composant qui émet des cookies doit décider si SameSite
convient à ses scénarios. Évaluez votre utilisation des API affectées et reconfigurez SameSite
en fonction des besoins.
Catégorie
ASP.NET Noyau
API affectées
HTTP : E/S synchrones désactivées sur tous les serveurs
À compter de ASP.NET Core 3.0, les opérations de serveur synchrone sont désactivées par défaut.
Description de la modification
AllowSynchronousIO
est une option dans chaque serveur qui active ou désactive les API d’E/S synchrones comme HttpRequest.Body.Read
, HttpResponse.Body.Write
et Stream.Flush
. Ces API ont longtemps été une source de privation de threads et de blocages d’applications. À compter de ASP.NET Core 3.0 Préversion 3, ces opérations synchrones sont désactivées par défaut.
Serveurs affectés :
- Crécerelle
- HttpSys
- Iis in-process
- TestServer
Attendez-vous aux erreurs suivantes :
Synchronous operations are disallowed. Call ReadAsync or set AllowSynchronousIO to true instead.
Synchronous operations are disallowed. Call WriteAsync or set AllowSynchronousIO to true instead.
Synchronous operations are disallowed. Call FlushAsync or set AllowSynchronousIO to true instead.
Chaque serveur a une option AllowSynchronousIO
qui contrôle ce comportement et la valeur par défaut pour tous les serveurs est désormais false
.
Le comportement peut également être remplacé sur demande en tant qu’atténuation temporaire. Par exemple :
var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>();
if (syncIOFeature != null)
{
syncIOFeature.AllowSynchronousIO = true;
}
Si vous rencontrez des problèmes avec un TextWriter
ou un autre flux appelant une API synchrone dans Dispose
, appelez la nouvelle API DisposeAsync
à la place.
Pour plus d’informations, consultez dotnet/aspnetcore#7644.
Version introduite
3.0
Ancien comportement
Par défaut, HttpRequest.Body.Read
, HttpResponse.Body.Write
et Stream.Flush
sont autorisés.
Nouveau comportement
Ces API synchrones ne sont pas autorisées par défaut :
Attendez-vous aux erreurs suivantes :
Synchronous operations are disallowed. Call ReadAsync or set AllowSynchronousIO to true instead.
Synchronous operations are disallowed. Call WriteAsync or set AllowSynchronousIO to true instead.
Synchronous operations are disallowed. Call FlushAsync or set AllowSynchronousIO to true instead.
Raison du changement
Ces API synchrones ont longtemps été une source de privation de threads et de blocages d’applications. À compter de ASP.NET Core 3.0 Préversion 3, les opérations synchrones sont désactivées par défaut.
Action recommandée
Utilisez les versions asynchrones des méthodes. Le comportement peut également être remplacé sur demande en tant qu’atténuation temporaire.
var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>();
if (syncIOFeature != null)
{
syncIOFeature.AllowSynchronousIO = true;
}
Catégorie
ASP.NET Noyau
API affectées
Identité : surcharge de méthode AddDefaultUI supprimée
À compter de ASP.NET Core 3.0, la surcharge de méthode IdentityBuilderUIExtensions.AddDefaultUI(IdentityBuilder,UIFramework) n’existe plus.
Version introduite
3.0
Raison du changement
Ce changement est le résultat de l’adoption de la fonctionnalité de ressources web statiques.
Action recommandée
Appelez IdentityBuilderUIExtensions.AddDefaultUI(IdentityBuilder) au lieu de la surcharge qui prend deux arguments. Si vous utilisez Bootstrap 3, ajoutez également la ligne suivante à un élément <PropertyGroup>
dans votre fichier projet :
<IdentityUIFrameworkVersion>Bootstrap3</IdentityUIFrameworkVersion>
Catégorie
ASP.NET Noyau
API affectées
IdentityBuilderUIExtensions.AddDefaultUI(IdentityBuilder,UIFramework)
Identité : la version Bootstrap par défaut de l’interface utilisateur a été modifiée
À compter de ASP.NET Core 3.0, l’interface utilisateur d’identité utilise par défaut la version 4 de Bootstrap.
Version introduite
3.0
Ancien comportement
L’appel de méthode services.AddDefaultIdentity<IdentityUser>().AddDefaultUI();
était le même que services.AddDefaultIdentity<IdentityUser>().AddDefaultUI(UIFramework.Bootstrap3);
Nouveau comportement
L’appel de méthode services.AddDefaultIdentity<IdentityUser>().AddDefaultUI();
est le même que services.AddDefaultIdentity<IdentityUser>().AddDefaultUI(UIFramework.Bootstrap4);
Raison du changement
Bootstrap 4 a été mis en production pendant la période ASP.NET Core 3.0.
Action recommandée
Vous êtes concerné par ce changement si vous utilisez l’interface utilisateur d’identité par défaut et que vous l’avez ajoutée dans Startup.ConfigureServices
, comme illustré dans l’exemple suivant :
services.AddDefaultIdentity<IdentityUser>().AddDefaultUI();
Effectuez l'une des opérations suivantes :
Migrez votre application pour utiliser Bootstrap 4 à l’aide de son guide de migration.
Mettre à jour
Startup.ConfigureServices
pour appliquer l’utilisation de Bootstrap 3. Par exemple :services.AddDefaultIdentity<IdentityUser>().AddDefaultUI(UIFramework.Bootstrap3);
Catégorie
ASP.NET Noyau
API affectées
Aucun
Identité : SignInAsync lève l’exception pour l’identité non authentifiée
Par défaut, SignInAsync
lève une exception pour les principaux/identités dans laquelle IsAuthenticated
est false
.
Version introduite
3.0
Ancien comportement
SignInAsync
accepte tous les principaux/identités, y compris les identités dans lesquelles IsAuthenticated
est false
.
Nouveau comportement
Par défaut, SignInAsync
lève une exception pour les principaux/identités dans laquelle IsAuthenticated
est false
. Il existe un nouvel indicateur pour supprimer ce comportement, mais le comportement par défaut a changé.
Raison du changement
L’ancien comportement était problématique, car, par défaut, ces principaux étaient rejetés par [Authorize]
/ RequireAuthenticatedUser()
.
Action recommandée
Dans ASP.NET Core 3.0 Préversion 6, il existe un indicateur RequireAuthenticatedSignIn
sur AuthenticationOptions
qui est true
par défaut. Définissez cet indicateur sur false
pour restaurer l’ancien comportement.
Catégorie
ASP.NET Noyau
API affectées
Aucun
Identité : le constructeur SignInManager accepte le nouveau paramètre
À compter de ASP.NET Core 3.0, un nouveau paramètre IUserConfirmation<TUser>
a été ajouté au constructeur SignInManager
. Pour plus d’informations, consultez dotnet/aspnetcore#8356.
Version introduite
3.0
Raison du changement
La motivation du changement était d’ajouter le support des nouveaux flux d’e-mail/confirmation dans l’identité.
Action recommandée
Si vous construisez manuellement un SignInManager
, fournissez une implémentation de IUserConfirmation
ou récupérez-en une à partir de l’injection de dépendances à fournir.
Catégorie
ASP.NET Noyau
API affectées
Identité : l’interface utilisateur utilise la fonctionnalité de ressources web statiques
ASP.NET Core 3.0 a introduit une fonctionnalité de ressources web statiques et l’interface utilisateur d’identité l’a adoptée.
Description de la modification
Suite à l’adoption par l’interface utilisateur d’identité de la fonctionnalité des ressources web statiques :
- La sélection de l’infrastructure s’effectue à l’aide de la propriété
IdentityUIFrameworkVersion
dans votre fichier projet. - Bootstrap 4 est l’infrastructure d’interface utilisateur par défaut pour l’interface utilisateur Identité. Bootstrap 3 a atteint sa fin de vie et vous devez envisager de migrer vers une version prise en charge.
Version introduite
3.0
Ancien comportement
L’infrastructure d’interface utilisateur par défaut pour l’interface utilisateur Identité était Bootstrap 3. L’infrastructure de l’interface utilisateur peut être configurée à l’aide d’un paramètre pour l’appel de méthode AddDefaultUI
dans Startup.ConfigureServices
.
Nouveau comportement
L’infrastructure d’interface utilisateur par défaut pour l’interface utilisateur Identité est Bootstrap 4. L’infrastructure de l’interface utilisateur doit être configurée dans votre fichier projet, au lieu de celle dans l’appel de méthode AddDefaultUI
.
Raison du changement
L’adoption de la fonctionnalité de ressources web statiques exige que la configuration de l’infrastructure de l’interface utilisateur passe à MSBuild. La décision sur l’infrastructure à incorporer est à prendre au moment de la génération. Ce n’est pas une décision de runtime.
Action recommandée
Consultez l’interface utilisateur de votre site pour vous assurer que les nouveaux composants Bootstrap 4 sont compatibles. Si nécessaire, utilisez la propriété MSBuild IdentityUIFrameworkVersion
pour revenir à la dernière version de Bootstrap 3. Ajoutez la propriété à un élément <PropertyGroup>
dans votre fichier projet :
<IdentityUIFrameworkVersion>Bootstrap3</IdentityUIFrameworkVersion>
Catégorie
ASP.NET Noyau
API affectées
IdentityBuilderUIExtensions.AddDefaultUI(IdentityBuilder, UIFramework)
Kestrel : adaptateurs de connexion supprimés
Dans le cadre du déplacement des API « pubternal » vers public
, le concept d’un IConnectionAdapter
a été supprimé de Kestrel. Les adaptateurs de connexion sont remplacés par un intergiciel de connexion (similaire au middleware HTTP dans le pipeline ASP.NET Core, mais pour les connexions de niveau inférieur). HTTPS et la journalisation des connexions sont passés des adaptateurs de connexion à l’intergiciel de connexion. Ces méthodes d’extension doivent continuer à fonctionner en toute transparence, mais les détails de l’implémentation ont changé.
Pour plus d’informations, consultez dotnet/aspnetcore#11412. Pour plus d’informations, consultez dotnet/aspnetcore#11475.
Version introduite
3.0
Ancien comportement
Les composants d’extensibilité Kestrel ont été créés à l’aide de IConnectionAdapter
.
Nouveau comportement
Les composants d’extensibilité Kestrel sont créés en tant qu’intergiciel.
Raison du changement
Ce changement est destiné à fournir une architecture d’extensibilité plus flexible.
Action recommandée
Convertissez toutes les implémentations de IConnectionAdapter
afin d'utiliser le nouveau patron d’intergiciel, comme indiqué dans dotnet/aspnetcore#11412.
Catégorie
ASP.NET Noyau
API affectées
Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal.IConnectionAdapter
Kestrel : assembly HTTPS vide supprimé
L’assembly Microsoft.AspNetCore.Server.Kestrel.Https a été supprimé.
Version introduite
3.0
Raison du changement
Dans ASP.NET Core 2.1, le contenu de Microsoft.AspNetCore.Server.Kestrel.Https
a été déplacé vers Microsoft.AspNetCore.Server.Kestrel.Core. Ce changement n’était pas un changement cassant, il a été effectué à l’aide des attributs [TypeForwardedTo]
.
Action recommandée
- Les bibliothèques faisant référence à
Microsoft.AspNetCore.Server.Kestrel.Https
2.0 doivent mettre à jour toutes les dépendances ASP.NET Core vers la version 2.1 ou ultérieure. Sinon, elles peuvent s’arrêter lorsqu’elles sont chargées dans une application ASP.NET Core 3.0. - Les applications et bibliothèques ciblant ASP.NET Core 2.1 et versions ultérieures doivent supprimer toutes les références directes au package NuGet
Microsoft.AspNetCore.Server.Kestrel.Https
.
Catégorie
ASP.NET Noyau
API affectées
Aucun
Kestrel : les en-têtes de code de fin des requêtes ont été déplacés vers la nouvelle collection
Dans les versions antérieures, Kestrel a ajouté des en-têtes de code de fin segmentés HTTP/1.1 dans la collection d’en-têtes des requêtes lorsque le corps de la requête a été lu jusqu’au bout. Ce comportement a suscité des préoccupations concernant l’ambiguïté entre les en-têtes et les codes de fin. La décision a été prise de déplacer les codes de fin vers une nouvelle collection.
Les codes de fin des requêtes HTTP/2 n’étaient pas disponibles dans ASP.NET Core 2.2, mais ils sont désormais disponibles dans cette nouvelle collection dans ASP.NET Core 3.0.
De nouvelles méthodes d’extension de requêtes ont été ajoutées pour accéder à ces codes de fin.
Les codes de fin HTTP/1.1 sont disponibles une fois que l’ensemble du corps de la requête a été lu.
Les codes de fin HTTP/2 sont disponibles une fois qu’ils sont envoyés par le client. Le client n’envoie pas les codes de fin tant que le corps de la requête n’a pas été mis en mémoire tampon par le serveur. Vous devrez peut-être lire le corps de la demande pour libérer de l’espace tampon. Les codes de fin sont toujours disponibles si vous lisez le corps de la demande jusqu’au bout. Les codes de fin marquent la fin du corps.
Version introduite
3.0
Ancien comportement
Les en-têtes de codes de fin des requêtes sont ajoutés à la collection HttpRequest.Headers
.
Nouveau comportement
Les en-têtes de code de fin des requêtes ne sont pas présents dans la collection HttpRequest.Headers
. Utilisez les méthodes d’extension suivantes sur HttpRequest
pour y accéder :
-
GetDeclaredTrailers()
: obtient l’en-tête « Code de fin » des requêtes qui répertorie les codes de fin à attendre après le corps. -
SupportsTrailers()
: indique si la demande prend en charge la réception des en-têtes de code de fin. -
CheckTrailersAvailable()
: détermine si la requête prend en charge les codes de fin et s’ils sont disponibles pour la lecture. -
GetTrailer(string trailerName)
: obtient l’en-tête du code de fin demandé à partir de la réponse.
Raison du changement
Les codes de fin sont une fonctionnalité clé dans des scénarios tels que gRPC. La fusion des codes de fin pour des en-têtes de demande a dérouté les utilisateurs.
Action recommandée
Utilisez les méthodes d’extension associées au code de fin sur HttpRequest
pour accéder aux codes de fin.
Catégorie
ASP.NET Noyau
API affectées
Kestrel : abstractions de transport supprimées et rendues publiques
Dans le cadre de l’éloignement des API « pubternal », les API de couche de transport Kestrel sont exposées en tant qu’interface publique dans la bibliothèque Microsoft.AspNetCore.Connections.Abstractions
.
Version introduite
3.0
Ancien comportement
- Des abstractions liées au transport étaient disponibles dans la bibliothèque
Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions
. - La propriété
ListenOptions.NoDelay
était disponible.
Nouveau comportement
- L’interface
IConnectionListener
a été introduite dans la bibliothèqueMicrosoft.AspNetCore.Connections.Abstractions
pour exposer les fonctionnalités les plus utilisées de la bibliothèque...Transport.Abstractions
. - le
NoDelay
est désormais disponible dans les options de transport (LibuvTransportOptions
etSocketTransportOptions
). -
SchedulingMode
n’est plus disponible.
Raison du changement
ASP.NET Core 3.0 a été retiré des API « pubternal ».
Action recommandée
Catégorie
ASP.NET Noyau
API affectées
Aucun
Localisation : ResourceManagerWithCultureStringLocalizer et WithCulture marqués comme obsolètes
La classe ResourceManagerWithCultureStringLocalizer et le membre de l’interface WithCulture sont souvent des sources de confusion pour les utilisateurs de la localisation, en particulier lors de la création de leur propre implémentation IStringLocalizer
. Ces éléments donnent à l’utilisateur l’impression qu’une instance IStringLocalizer
est « par langage, par ressource ». En réalité, les instances doivent uniquement être « par ressource ». Le langage recherché est déterminé par le CultureInfo.CurrentUICulture
au moment de l’exécution. Pour éliminer la source de confusion, les API ont été marquées comme obsolètes dans ASP.NET Core 3.0. Les API seront supprimées dans une version ultérieure.
Pour connaître le contexte, consultez dotnet/aspnetcore#3324. Pour plus d’informations, consultez dotnet/aspnetcore#7756.
Version introduite
3.0
Ancien comportement
Les méthodes n’ont pas été marquées comme Obsolete
.
Nouveau comportement
Les méthodes sont marquées Obsolete
.
Raison du changement
Les API représentaient un cas d’usage qui n’est pas recommandé. Il y avait une confusion au sujet de la conception de la localisation.
Action recommandée
La recommandation est d’utiliser ResourceManagerStringLocalizer
à la place. Laissez la culture être définie par le CurrentCulture
. Si ce n’est pas une option, créez et utilisez une copie de ResourceManagerWithCultureStringLocalizer.
Catégorie
ASP.NET Noyau
API affectées
Microsoft.Extensions.Localization.ResourceManagerWithCultureStringLocalizer
Microsoft.Extensions.Localization.ResourceManagerStringLocalizer.WithCulture
Journalisation : la classe DebugLogger est devenue interne
Avant ASP.NET Core 3.0, le modificateur d’accès de DebugLogger
était public
. Dans ASP.NET Core 3.0, le modificateur d’accès est passé à internal
.
Version introduite
3.0
Raison du changement
Le changement est apporté à :
- Appliquez la cohérence avec d’autres implémentations de l’enregistreur d’événements, telles que
ConsoleLogger
. - Réduisez la surface de l’API.
Action recommandée
Utilisez la méthode d’extension AddDebugILoggingBuilder
pour activer la journalisation de débogage.
DebugLoggerProvider est également toujours public
dans le cas où le service doit être inscrit manuellement.
Catégorie
ASP.NET Noyau
API affectées
Microsoft.Extensions.Logging.Debug.DebugLogger
MVC : suffixe asynchrone découpé des noms d’action du contrôleur
Dans le cadre de l’adressage dotnet/aspnetcore#4849, ASP.NET Core MVC découpe le suffixe Async
des noms d’action par défaut. À compter de ASP.NET Core 3.0, ce changement affecte à la fois le routage et la génération de liens.
Version introduite
3.0
Ancien comportement
Prenez en compte le contrôleur MVC ASP.NET Core suivant :
public class ProductController : Controller
{
public async IActionResult ListAsync()
{
var model = await DbContext.Products.ToListAsync();
return View(model);
}
}
L’action est routable via Product/ListAsync
. La génération de liens nécessite la spécification du suffixe Async
. Par exemple :
<a asp-controller="Product" asp-action="ListAsync">List</a>
Nouveau comportement
Dans ASP.NET Core 3.0, l’action est routable via Product/List
. Le code de génération de lien doit omettre le suffixe Async
. Par exemple :
<a asp-controller="Product" asp-action="List">List</a>
Ce changement n’affecte pas les noms spécifiés à l’aide de l’attribut [ActionName]
. Le nouveau comportement peut être désactivé en définissant MvcOptions.SuppressAsyncSuffixInActionNames
false
sur Startup.ConfigureServices
:
services.AddMvc(options =>
{
options.SuppressAsyncSuffixInActionNames = false;
});
Raison du changement
Par convention, les méthodes .NET asynchrones contiennent le suffixe Async
. Toutefois, lorsqu’une méthode définit une action MVC, il n’est pas souhaitable d’utiliser le suffixe Async
.
Action recommandée
Si votre application dépend des actions MVC qui préservent le suffixe Async
du nom, choisissez l’une des atténuations suivantes :
- Utilisez l’attribut
[ActionName]
pour conserver le nom d’origine. - Désactivez entièrement le renommage en définissant
MvcOptions.SuppressAsyncSuffixInActionNames
surfalse
dansStartup.ConfigureServices
:
services.AddMvc(options =>
{
options.SuppressAsyncSuffixInActionNames = false;
});
Catégorie
ASP.NET Noyau
API affectées
Aucun
MVC : JsonResult déplacé vers Microsoft.AspNetCore.Mvc.Core
JsonResult
a été déplacé vers l’assembly Microsoft.AspNetCore.Mvc.Core
. Ce type était utilisé pour être défini dans Microsoft.AspNetCore.Mvc.Formatters.Json. Un attribut [TypeForwardedTo] au niveau de l’assembly a été ajouté àMicrosoft.AspNetCore.Mvc.Formatters.Json
pour résoudre ce problème pour la majorité des utilisateurs. Les applications qui utilisent des bibliothèques tierces peuvent rencontrer des problèmes.
Version introduite
3.0 Préversion 6
Ancien comportement
Une application utilisant une bibliothèque basée sur la version 2.2 est générée avec succès.
Nouveau comportement
Une application utilisant une bibliothèque 2.2 échoue à la compilation. Une erreur contenant une variante du texte suivant est fournie :
The type 'JsonResult' exists in both 'Microsoft.AspNetCore.Mvc.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' and 'Microsoft.AspNetCore.Mvc.Formatters.Json, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'
Pour obtenir un exemple de ce type de problème, consultez dotnet/aspnetcore#7220.
Raison du changement
Changements au niveau de la plateforme de la composition des ASP.NET Core comme décrit dans aspnet/Announcements#325.
Action recommandée
Les bibliothèques compilées sur la version 2.2 de Microsoft.AspNetCore.Mvc.Formatters.Json
peuvent devoir être recompilées pour résoudre le problème pour tous les contrôles serveur consommateur. S’il est concerné, contactez l’auteur de la bibliothèque. Demandez la recompilation de la bibliothèque pour cibler ASP.NET Core 3.0.
Catégorie
ASP.NET Noyau
API affectées
Microsoft.AspNetCore.Mvc.JsonResult
MVC : outil de précompilation déconseillé
Dans ASP.NET Core 1.1, le package Microsoft.AspNetCore.Mvc.Razor.ViewCompilation
(outil de précompilation MVC) a été introduit pour ajouter le support de la compilation au moment de la publication des fichiers Razor (fichiers .cshtml). Dans ASP.NET Core 2.1, le Kit de développement logiciel (SDK) Razor a été introduit pour développer les fonctionnalités de l’outil de précompilation. Le Kit de développement logiciel (SDK) Razor a ajouté le support de la compilation au moment de la génération et de la publication des fichiers Razor. Le Kit de développement logiciel (SDK) vérifie l’exactitude des fichiers .cshtml au moment de la génération tout en s’améliorant au moment du démarrage de l’application. Le Kit de développement logiciel (SDK) Razor est activé par défaut et aucun mouvement n’est nécessaire pour commencer à l’utiliser.
Dans ASP.NET Core 3.0, l’outil de précompilation MVC 1.1-era ASP.NET Core a été supprimé. Les versions de package antérieures continueront de recevoir des patches importants de bogues et de sécurité dans la mise en production du patch.
Version introduite
3.0
Ancien comportement
Le package Microsoft.AspNetCore.Mvc.Razor.ViewCompilation
a été utilisé pour précompiler les affichages Razor MVC.
Nouveau comportement
Le Kit de développement logiciel (SDK) Razor prend en charge cette fonctionnalité en mode natif. Le package Microsoft.AspNetCore.Mvc.Razor.ViewCompilation
n’est plus mis à jour.
Raison du changement
Le Kit de développement logiciel (SDK) Razor fournit davantage de fonctionnalités et vérifie l’exactitude des fichiers .cshtml au moment de la génération. Le Kit de développement logiciel (SDK) améliore également le temps de démarrage de l’application.
Action recommandée
Pour les utilisateurs de ASP.NET Core 2.1 ou version ultérieure, mettez à jour pour utiliser le support native de la précompilation dans le Kit de développement logiciel (SDK) Razor. Si des bogues ou des fonctionnalités manquantes empêchent la migration vers le Kit de développement logiciel (SDK) Razor, ouvrez un problème sur dotnet/aspnetcore.
Catégorie
ASP.NET Noyau
API affectées
Aucun
MVC : les types « pubternal » sont passés en interne
Dans ASP.NET Core 3.0, tous les types « pubternal » dans MVC ont été mis à jour pour être public
dans un espace de noms pris en charge ou internal
le cas échéant.
Description de la modification
Dans ASP.NET Core, les types « pubternal » sont déclarés comme public
mais résident dans un espace de noms avec le suffixe .Internal
. Bien que ces types soient public
, ils n’ont aucune stratégie de support et sont sujets à des changements cassants. Malheureusement, l’utilisation accidentelle de ces types a été fréquente, ce qui a entraîné des changements cassants dans ces projets en limitant la capacité à gérer l’infrastructure.
Version introduite
3.0
Ancien comportement
Certains types dans MVC étaient public
mais dans un espace de noms .Internal
. Ces types n’avaient aucune stratégie de support et étaient sujets à des changements cassants.
Nouveau comportement
Tous ces types sont mis à jour pour être public
dans un espace de noms pris en charge ou marqués comme internal
.
Raison du changement
L’utilisation accidentelle de ces types « pubternal » a été fréquente, ce qui a entraîné des changements cassants dans ces projets en limitant la capacité à gérer l’infrastructure.
Action recommandée
Si vous utilisez des types qui sont devenus vraiment public
et qui ont été déplacés vers un nouvel espace de noms pris en charge, mettez à jour vos références pour qu’elles correspondent aux nouveaux espaces de noms.
Si vous utilisez des types qui ont été marqués comme internal
, vous devez trouver une alternative. Les types « pubternal » précédents n’étaient jamais pris en charge pour un usage public. S’il existe des types spécifiques dans ces espaces de noms qui sont critiques pour vos applications, signalez un problème sur dotnet/aspnetcore. Des considérations peuvent être prises en compte pour créer les types public
demandés.
Catégorie
ASP.NET Noyau
API affectées
Ce changement inclut les types dans les espaces de noms suivants :
Microsoft.AspNetCore.Mvc.Cors.Internal
Microsoft.AspNetCore.Mvc.DataAnnotations.Internal
Microsoft.AspNetCore.Mvc.Formatters.Internal
Microsoft.AspNetCore.Mvc.Formatters.Json.Internal
Microsoft.AspNetCore.Mvc.Formatters.Xml.Internal
Microsoft.AspNetCore.Mvc.Internal
Microsoft.AspNetCore.Mvc.ModelBinding.Internal
Microsoft.AspNetCore.Mvc.Razor.Internal
Microsoft.AspNetCore.Mvc.RazorPages.Internal
Microsoft.AspNetCore.Mvc.TagHelpers.Internal
Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
MVC : le shim de compatibilité de l’API web a été supprimé
À compter de ASP.NET Core 3.0, le package Microsoft.AspNetCore.Mvc.WebApiCompatShim
n’est plus disponible.
Description de la modification
Le package Microsoft.AspNetCore.Mvc.WebApiCompatShim
(WebApiCompatShim) fournit une compatibilité partielle dans ASP.NET Core avec ASP.NET API Web 4.x 2 pour simplifier la migration des implémentations d’API web existantes vers ASP.NET Core. Toutefois, les applications qui utilisent WebApiCompatShim ne bénéficient pas des fonctionnalités liées à l’API qui sont livrées dans les versions récentes ASP.NET Core. Ces fonctionnalités incluent l’amélioration de la génération de spécifications Open API, la gestion standardisée des erreurs et la génération du code client. Pour mieux concentrer les efforts de l’API dans la version 3.0, WebApiCompatShim a été supprimé. Les applications existantes utilisant WebApiCompatShim doivent migrer vers le modèle [ApiController]
plus récent.
Version introduite
3.0
Raison du changement
Le shim de compatibilité de l’API web était un outil de migration. Il limite l’accès utilisateur aux nouvelles fonctionnalités ajoutées dans ASP.NET Core.
Action recommandée
Supprimez l’utilisation de ce shim et migrez directement vers les fonctionnalités similaires dans ASP.NET Core lui-même.
Catégorie
ASP.NET Noyau
API affectées
Microsoft.AspNetCore.Mvc.WebApiCompatShim
Razor : l’API RazorTemplateEngine a été supprimée
L’API RazorTemplateEngine
a été supprimée et remplacée par Microsoft.AspNetCore.Razor.Language.RazorProjectEngine
.
Pour plus d’informations, consultez le problème GitHub dotnet/aspnetcore#25215.
Version introduite
3.0
Ancien comportement
Un moteur de modèle peut être créé et utilisé pour analyser et générer du code pour les fichiers Razor.
Nouveau comportement
RazorProjectEngine
peut être créé avec le même type d’informations que RazorTemplateEngine
pour analyser et générer du code pour les fichiers Razor.
RazorProjectEngine
fournit également des niveaux de configuration supplémentaires.
Raison du changement
RazorTemplateEngine
était trop étroitement couplé aux implémentations existantes. Ce couplage serré a conduit à plus de questions lors de la tentative de configurer correctement un pipeline d’analyse/génération Razor.
Action recommandée
Utilisez RazorProjectEngine
au lieu de RazorTemplateEngine
. Voici quelques exemples.
Créer et configurer RazorProjectEngine
RazorProjectEngine projectEngine =
RazorProjectEngine.Create(RazorConfiguration.Default,
RazorProjectFileSystem.Create(@"C:\source\repos\ConsoleApp4\ConsoleApp4"),
builder =>
{
builder.ConfigureClass((document, classNode) =>
{
classNode.ClassName = "MyClassName";
// Can also configure other aspects of the class here.
});
// More configuration can go here
});
Générer du code pour un fichier Razor
RazorProjectItem item = projectEngine.FileSystem.GetItem(
@"C:\source\repos\ConsoleApp4\ConsoleApp4\Example.cshtml",
FileKinds.Legacy);
RazorCodeDocument output = projectEngine.Process(item);
// Things available
RazorSyntaxTree syntaxTree = output.GetSyntaxTree();
DocumentIntermediateNode intermediateDocument =
output.GetDocumentIntermediateNode();
RazorCSharpDocument csharpDocument = output.GetCSharpDocument();
Catégorie
ASP.NET Noyau
API affectées
RazorTemplateEngine
RazorTemplateEngineOptions
Razor : compilation du runtime déplacée vers un package
Le support de la compilation du runtime des affichages Razor et des pages Razor a été déplacée vers un package distinct.
Version introduite
3.0
Ancien comportement
La compilation runtime est disponible sans avoir besoin de packages supplémentaires.
Nouveau comportement
La fonctionnalité a été déplacée vers le package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
Les API suivantes étaient précédemment disponibles dans Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions
pour prendre en charge la compilation du runtime. Les API sont désormais disponibles via Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.MvcRazorRuntimeCompilationOptions
.
-
RazorViewEngineOptions.FileProviders
est maintenantMvcRazorRuntimeCompilationOptions.FileProviders
-
RazorViewEngineOptions.AdditionalCompilationReferences
est maintenantMvcRazorRuntimeCompilationOptions.AdditionalReferencePaths
En outre, Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions.AllowRecompilingViewsOnFileChange
a été supprimé. La recompilation sur les changements de fichier est activée par défaut en référençant le package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
.
Raison du changement
Ce changement était nécessaire pour supprimer la dépendance de l’infrastructure partagée ASP.NET Core envers Roslyn.
Action recommandée
Les applications qui nécessitent une compilation ou une recompilation du runtime de fichiers Razor doivent effectuer les étapes suivantes :
Ajouter une référence au package
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
.Mettre à jour la méthode
Startup.ConfigureServices
du projet pour inclure un appel àAddRazorRuntimeCompilation
. Par exemple :services.AddMvc() .AddRazorRuntimeCompilation();
Catégorie
ASP.NET Noyau
API affectées
Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions
État de session : API obsolètes supprimées
Les API obsolètes pour la configuration des cookies de session ont été supprimées. Pour plus d’informations, consultez aspnet/Announcements#257.
Version introduite
3.0
Raison du changement
Ce changement applique la cohérence entre les API pour la configuration des fonctionnalités qui utilisent des cookies.
Action recommandée
Migrez l’utilisation des API supprimées vers leurs remplacements plus récents. Prenons l’exemple suivant dans Startup.ConfigureServices
:
public void ConfigureServices(ServiceCollection services)
{
services.AddSession(options =>
{
// Removed obsolete APIs
options.CookieName = "SessionCookie";
options.CookieDomain = "contoso.com";
options.CookiePath = "/";
options.CookieHttpOnly = true;
options.CookieSecure = CookieSecurePolicy.Always;
// new API
options.Cookie.Name = "SessionCookie";
options.Cookie.Domain = "contoso.com";
options.Cookie.Path = "/";
options.Cookie.HttpOnly = true;
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
});
}
Catégorie
ASP.NET Noyau
API affectées
- Microsoft.AspNetCore.Builder.SessionOptions.CookieDomain
- Microsoft.AspNetCore.Builder.SessionOptions.CookieHttpOnly
- Microsoft.AspNetCore.Builder.SessionOptions.CookieName
- Microsoft.AspNetCore.Builder.SessionOptions.CookiePath
- Microsoft.AspNetCore.Builder.SessionOptions.CookieSecure
Infrastructure partagée : les assemblys supprimés de Microsoft.AspNetCore.App
À compter de ASP.NET Core 3.0, l’infrastructure partagée ASP.NET Core (Microsoft.AspNetCore.App
) contient uniquement des assemblys internes entièrement développés, pris en charge et pouvant être gérés par Microsoft.
Description de la modification
Considérez le changement comme la redéfinition des limites de la « plateforme » ASP.NET Core. L’infrastructure partagée sera compilable par la source par n’importe qui via GitHub et continuera d’offrir les avantages existants des infrastructures partagées .NET Core à vos applications. Certains avantages incluent une taille de déploiement plus petite, une mise à jour corrective centralisée et un temps de démarrage plus rapide.
Dans le cadre du changement, certains changements cassants notables sont introduits dans Microsoft.AspNetCore.App
.
Version introduite
3.0
Ancien comportement
Projets référencés Microsoft.AspNetCore.App
via un élément <PackageReference>
dans le fichier projet.
En outre, Microsoft.AspNetCore.App
contenait les sous-composants suivants :
- Json.NET (
Newtonsoft.Json
) - Entity Framework Core (assemblys avec le préfixe
Microsoft.EntityFrameworkCore.
) - Roslyn (
Microsoft.CodeAnalysis
)
Nouveau comportement
Une référence à Microsoft.AspNetCore.App
ne nécessite plus d’élément <PackageReference>
dans le fichier projet. Le Kit de développement logiciel (SDK) .NET Core prend en charge un nouvel élément appelé <FrameworkReference>
, qui remplace l’utilisation de <PackageReference>
.
Pour plus d’informations, consultez dotnet/aspnetcore#3612.
Entity Framework Core expédié comme des packages NuGet. Ce changement aligne le modèle d’expédition sur toutes les autres bibliothèques d’accès aux données sur .NET. Il fournit à Entity Framework Core le chemin d’accès le plus simple pour continuer à innover tout en prenant en charge les différentes plateformes .NET. Le déplacement d’Entity Framework Core hors de l’infrastructure partagée n’a aucun impact sur son état en tant que bibliothèque développée, prise en charge et utilisable par Microsoft. La stratégie de support de .NET Core continue de le couvrir.
Json.NET et Entity Framework Core continuent de fonctionner avec ASP.NET Core. Toutefois, ils ne seront pas inclus dans l’infrastructure partagée.
Pour plus d’informations, consultez L’avenir de JSON dans .NET Core 3.0. Consultez également la liste complète des composants binaires supprimés de l’infrastructure partagée.
Raison du changement
Ce changement simplifie la consommation de Microsoft.AspNetCore.App
et réduit la duplication entre les packages NuGet et les infrastructures partagées.
Pour plus d’informations sur la motivation de ce changement, consultez ce billet de blog.
Action recommandée
À compter de ASP.NET Core 3.0, il n’est plus nécessaire que les projets consomment des assemblys dans Microsoft.AspNetCore.App
en tant que packages NuGet. Pour simplifier le ciblage et l’utilisation de l’infrastructure partagée ASP.NET Core, de nombreux packages NuGet livrés depuis ASP.NET Core 1.0 ne sont plus produits. Les API que ces packages fournissent sont toujours disponibles pour les applications à l’aide d’un <FrameworkReference>
pour Microsoft.AspNetCore.App
. Les exemples d’API courants incluent Kestrel, MVC et Razor.
Ce changement ne s’applique pas à tous les composants binaires référencés via Microsoft.AspNetCore.App
dans ASP.NET Core 2.x. Les exceptions notables sont les suivantes :
- Les bibliothèques
Microsoft.Extensions
qui continuent de cibler .NET Standard sont disponibles en tant que packages NuGet (consultez https://github.com/dotnet/extensions). - Les API produites par l’équipe ASP.NET Core qui ne font pas partie de
Microsoft.AspNetCore.App
. Par exemple, les composants suivants sont disponibles en tant que packages NuGet :- Entity Framework Core (infrastructure d'entité de base)
- Les API qui fournissent une intégration tierce
- Fonctionnalités expérimentales
- Les API avec des dépendances qui n’ont pas pu répondre aux exigences pour être dans l’infrastructure partagée
- Extensions de MVC qui gèrent le support de Json.NET. Une API est fournie en tant que package NuGet pour prendre en charge l’utilisation de Json.NET et MVC. Consultez le guide de migration ASP.NET Core pour plus d’informations.
- Le client SignalR .NET continue de prendre en charge .NET Standard et est fourni en tant que package NuGet. Il est destiné à être utilisé sur de nombreux runtimes .NET, tels que Xamarin et UWP.
Pour plus d’informations, consultez Arrêter la production de packages pour les assemblys d’infrastructures partagées dans la version 3.0. Pour plus d’informations, consultez dotnet/aspnetcore#3757.
Catégorie
ASP.NET Noyau
API affectées
Infrastructure partagée : Microsoft.AspNetCore.All supprimé
À compter de ASP.NET Core 3.0, le métapaquet Microsoft.AspNetCore.All
et l’infrastructure partagée Microsoft.AspNetCore.All
correspondante ne sont plus produits. Ce package est disponible dans ASP.NET Core 2.2 et continuera de recevoir des mises à jour de maintenance dans ASP.NET Core 2.1.
Version introduite
3.0
Ancien comportement
Les applications peuvent utiliser le métapaquet Microsoft.AspNetCore.All
pour cibler l’infrastructure partagée Microsoft.AspNetCore.All
sur .NET Core.
Nouveau comportement
.NET Core 3.0 n’inclut pas d’infrastructure partagée Microsoft.AspNetCore.All
.
Raison du changement
Le métapaquet Microsoft.AspNetCore.All
comprenait un grand nombre de dépendances externes.
Action recommandée
Migrez votre projet pour utiliser l’infrastructure Microsoft.AspNetCore.App
. Les composants qui étaient précédemment disponibles dans Microsoft.AspNetCore.All
sont toujours disponibles sur NuGet. Ces composants sont désormais déployés avec votre application au lieu d’être inclus dans l’infrastructure partagée.
Catégorie
ASP.NET Noyau
API affectées
Aucun
SignalR : HandshakeProtocol.SuccessHandshakeData remplacé
Le champ HandshakeProtocol.SuccessHandshakeData a été supprimé et remplacé par une méthode d’assistance qui génère une réponse de négociation réussie en fonction d’un IHubProtocol
spécifique.
Version introduite
3.0
Ancien comportement
HandshakeProtocol.SuccessHandshakeData
était un champ public static ReadOnlyMemory<byte>
.
Nouveau comportement
HandshakeProtocol.SuccessHandshakeData
a été remplacé par une méthode static
GetSuccessfulHandshake(IHubProtocol protocol)
qui retourne un ReadOnlyMemory<byte>
basé sur le protocole spécifié.
Raison du changement
Des champs supplémentaires ont été ajoutés à la réponse d’établissement d'une liaison. Ils ne sont pas constants et changent en fonction du protocole sélectionné.
Action recommandée
Aucun. Ce type n’est pas conçu pour être utilisé à partir du code utilisateur. Il s’agit de public
et il peut donc être partagé entre le serveur SignalR et le client. Il peut également être utilisé par les clients SignalR du client écrits dans .NET. Les utilisateurs de SignalR ne doivent pas être affectés par ce changement.
Catégorie
ASP.NET Noyau
API affectées
HandshakeProtocol.SuccessHandshakeData
SignalR : méthodes HubConnection ResetSendPing et ResetTimeout supprimées
Les méthodes ResetSendPing
et ResetTimeout
ont été supprimées de l’API HubConnection
SignalR. Ces méthodes étaient initialement destinées uniquement à un usage interne, mais ont été rendues publiques dans ASP.NET Core 2.2. Ces méthodes ne seront pas disponibles à partir de la version ASP.NET Core 3.0 Préversion 4. Pour plus d’informations, consultez dotnet/aspnetcore#8543.
Version introduite
3.0
Ancien comportement
Les API étaient disponibles.
Nouveau comportement
Les API sont supprimées.
Raison du changement
Ces méthodes étaient initialement destinées uniquement à un usage interne, mais ont été rendues publiques dans ASP.NET Core 2.2.
Action recommandée
N’utilisez pas ces méthodes.
Catégorie
ASP.NET Noyau
API affectées
SignalR : les constructeurs HubConnectionContext ont été modifiés
Les constructeurs HubConnectionContext
de SignalR ont été changés pour accepter un type d’options, plutôt que plusieurs paramètres, en options d’ajout à l’épreuve du temps. Ce changement remplace deux constructeurs par un seul constructeur qui accepte un type d’options.
Version introduite
3.0
Ancien comportement
HubConnectionContext
a deux constructeurs :
public HubConnectionContext(ConnectionContext connectionContext, TimeSpan keepAliveInterval, ILoggerFactory loggerFactory);
public HubConnectionContext(ConnectionContext connectionContext, TimeSpan keepAliveInterval, ILoggerFactory loggerFactory, TimeSpan clientTimeoutInterval);
Nouveau comportement
Les deux constructeurs ont été supprimés et remplacés par un seul constructeur :
public HubConnectionContext(ConnectionContext connectionContext, HubConnectionContextOptions contextOptions, ILoggerFactory loggerFactory)
Raison du changement
Le nouveau constructeur utilise un nouvel objet d’options. Par conséquent, les fonctionnalités de HubConnectionContext
peuvent être développées à l’avenir sans apporter plus de constructeurs ni de changements cassants.
Action recommandée
Au lieu d’utiliser le constructeur suivant :
HubConnectionContext connectionContext = new HubConnectionContext(
connectionContext,
keepAliveInterval: TimeSpan.FromSeconds(15),
loggerFactory,
clientTimeoutInterval: TimeSpan.FromSeconds(15));
Utilisez le constructeur suivant :
HubConnectionContextOptions contextOptions = new HubConnectionContextOptions()
{
KeepAliveInterval = TimeSpan.FromSeconds(15),
ClientTimeoutInterval = TimeSpan.FromSeconds(15)
};
HubConnectionContext connectionContext = new HubConnectionContext(connectionContext, contextOptions, loggerFactory);
Catégorie
ASP.NET Noyau
API affectées
- HubConnectionContext(ConnectionContext, TimeSpan, ILoggerFactory)
- HubConnectionContext(ConnectionContext, TimeSpan, ILoggerFactory, TimeSpan)
SignalR : changement du nom du package client JavaScript
Dans ASP.NET Core 3.0 Préversion 7, le nom du package client JavaScript SignalR est passé de @aspnet/signalr
à @microsoft/signalr
. Le changement de nom reflète le fait que l’utilité de SignalR est plus large que pour les applications ASP.NET Core seules, grâce à Azure SignalR Service.
Pour réagir à ce changement, modifiez les références dans vos fichiers package.json, instructions require
et instructions import
ECMAScript. Aucune API ne sera modifiée dans le cadre de ce renommage.
Pour plus d’informations, consultez dotnet/aspnetcore#11637.
Version introduite
3.0
Ancien comportement
Le package client a été nommé @aspnet/signalr
.
Nouveau comportement
Le package client est nommé @microsoft/signalr
.
Raison du changement
Le changement de nom précise que SignalR est utile au-delà des applications ASP.NET Core, grâce à Azure SignalR Service.
Action recommandée
Basculez vers le nouveau package @microsoft/signalr
.
Catégorie
ASP.NET Noyau
API affectées
Aucun
SignalR : méthodes UseSignalR et UseConnections marquées comme obsolètes
Les méthodes UseConnections
et UseSignalR
et les classes ConnectionsRouteBuilder
et HubRouteBuilder
sont marquées comme obsolètes dans ASP.NET Core 3.0.
Version introduite
3.0
Ancien comportement
Le routage du hub SignalR a été configuré à l’aide de UseSignalR
ou UseConnections
.
Nouveau comportement
L’ancienne méthode de configuration du routage a été obsolète et remplacée par le routage de point de terminaison.
Raison du changement
L’intergiciel est déplacé vers le nouveau système de routage du point de terminaison. L’ancienne méthode d’ajout d’intergiciels est devenue obsolète.
Action recommandée
Remplacez UseSignalR
par UseEndpoints
:
Ancien code :
app.UseSignalR(routes =>
{
routes.MapHub<SomeHub>("/path");
});
Nouveau code :
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<SomeHub>("/path");
});
Catégorie
ASP.NET Noyau
API affectées
- Microsoft.AspNetCore.Builder.ConnectionsAppBuilderExtensions.UseConnections(IApplicationBuilder, Action<ConnectionsRouteBuilder>)
- Microsoft.AspNetCore.Builder.SignalRAppBuilderExtensions.UseSignalR(IApplicationBuilder, Action<HubRouteBuilder>)
- Microsoft.AspNetCore.Http.Connections.ConnectionsRouteBuilder
- Microsoft.AspNetCore.SignalR.HubRouteBuilder
SPA : SpaServices et NodeServices marqués comme obsolètes
Le contenu des packages NuGet suivants n’a pas été nécessaire depuis ASP.NET Core 2.1. Par conséquent, les packages suivants sont marqués comme obsolètes :
Pour la même raison, les modules npm suivants sont marqués comme déconseillés :
Les packages précédents et les modules npm seront supprimés ultérieurement dans .NET 5.
Version introduite
3.0
Ancien comportement
Les packages déconseillés et les modules npm étaient destinés à intégrer ASP.NET Core à différentes infrastructures d’applications monopages (SPA). Ces infrastructures incluent Angular, React et React avec Redux.
Nouveau comportement
Un nouveau mécanisme d’intégration existe dans le package NuGet Microsoft.AspNetCore.SpaServices.Extensions. Le package reste la base des modèles de projet Angular et React depuis ASP.NET Core 2.1.
Raison du changement
ASP.NET Core prend en charge l’intégration à différentes infrastructures d’applications monopages (SPA), notamment Angular, React et React avec Redux. Au départ, l’intégration à ces infrastructures a été effectuée avec des composants spécifiques à ASP.NET Core qui géraient des scénarios tels que le prérendu côté serveur et l’intégration à Webpack. Au fil du temps, les normes de l’industrie ont changé. Chacune des infrastructures SPA a publié ses propres interfaces de ligne de commande standard. Par exemple, Angular CLI et create-react-app.
Lorsque ASP.NET Core 2.1 a été publié en mai 2018, l’équipe a réagi au changement de normes. Un moyen plus récent et plus simple d’intégrer les propres chaînes d’outils des infrastructures SPA a été fourni. Le nouveau mécanisme d’intégration existe dans le package Microsoft.AspNetCore.SpaServices.Extensions
et reste la base des modèles de projet Angular et React depuis ASP.NET Core 2.1.
Pour clarifier que les anciens composants spécifiques aux ASP.NET Core sont non pertinents et non recommandés :
- Le mécanisme d’intégration antérieur à la version 2.1 est marqué comme obsolète.
- Les packages npm de support sont marqués comme déconseillés.
Action recommandée
Si vous utilisez ces packages, mettez à jour vos applications pour utiliser les fonctionnalités suivantes :
- Dans le package
Microsoft.AspNetCore.SpaServices.Extensions
. - Fournis par les infrastructures SPA que vous utilisez
Pour activer des fonctionnalités telles que le prérendu côté serveur et le rechargement de module à chaud, consultez la documentation de l’infrastructure SPA correspondante. La fonctionnalité dans Microsoft.AspNetCore.SpaServices.Extensions
n’est pas obsolète et continuera d’être prise en charge.
Catégorie
ASP.NET Noyau
API affectées
Microsoft.AspNetCore.NodeServices.HostingModels.INodeInstance
Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationException
Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationInfo
Microsoft.AspNetCore.NodeServices.HostingModels.NodeServicesOptionsExtensions
Microsoft.AspNetCore.NodeServices.HostingModels.OutOfProcessNodeInstance
Microsoft.AspNetCore.SpaServices.Prerendering.ISpaPrerenderer
Microsoft.AspNetCore.SpaServices.Prerendering.ISpaPrerendererBuilder
Microsoft.AspNetCore.SpaServices.Prerendering.JavaScriptModuleExport
Microsoft.AspNetCore.SpaServices.Prerendering.PrerenderTagHelper
Microsoft.AspNetCore.SpaServices.Prerendering.RenderToStringResult
Microsoft.AspNetCore.SpaServices.Webpack.WebpackDevMiddlewareOptions
Microsoft.Extensions.DependencyInjection.NodeServicesServiceCollectionExtensions
Microsoft.Extensions.DependencyInjection.PrerenderingServiceCollectionExtensions
SPA : SpaServices et NodeServices ne reviennent plus à l’enregistreur d’événements de la console
Microsoft.AspNetCore.SpaServices et Microsoft.AspNetCore.NodeServices n’affichent pas les journaux de console, sauf si la journalisation est configurée.
Version introduite
3.0
Ancien comportement
Microsoft.AspNetCore.SpaServices
et Microsoft.AspNetCore.NodeServices
utilisés pour créer automatiquement un enregistreur d’événements de console lorsque la journalisation n’est pas configurée.
Nouveau comportement
Microsoft.AspNetCore.SpaServices
et Microsoft.AspNetCore.NodeServices
n’affichent pas les journaux de console, sauf si la journalisation est configurée.
Raison du changement
Il est nécessaire de s’aligner sur la façon dont les autres packages ASP.NET Core implémentent la journalisation.
Action recommandée
Si l’ancien comportement est requis, pour configurer la journalisation de la console, ajoutez services.AddLogging(builder => builder.AddConsole())
à votre méthode Setup.ConfigureServices
.
Catégorie
ASP.NET Noyau
API affectées
Aucun
Version cible de .Net Framework : le support .NET Framework a été annulé
À compter de ASP.NET Core 3.0, .NET Framework est une version cible de .Net Framework non prise en charge.
Description de la modification
.NET Framework 4.8 est la dernière version principale de .NET Framework. Les nouvelles applications ASP.NET Core doivent être basées sur .NET Core. À compter de la version de .NET Core 3.0, vous pouvez considérer ASP.NET Core 3.0 comme faisant partie de .NET Core.
Les clients qui utilisent ASP.NET Core avec .NET Framework peuvent continuer de manière entièrement prise en charge à l’aide de la version 2.1 LTS. Le support et la maintenance de la version 2.1 se poursuivent jusqu’au 21 août 2021 au moins. Il s’agit de trois ans après la déclaration de la version LTS conformément à la stratégie de support .NET. Le support des packages ASP.NET Core 2.1 sur .NET Framework s’étendra indéfiniment, comme la stratégie de maintenance des autres infrastructures de ASP.NET basées sur des packages.
Pour plus d’informations sur le déplacement de .NET Framework vers .NET Core, consultez Déplacement vers .NET Core.
Les packages Microsoft.Extensions
(tels que la journalisation, l’injection de dépendances et la configuration) et Entity Framework Core ne sont pas affectés. Ils continueront à prendre en charge .NET Standard.
Pour plus d’informations sur la motivation de ce changement, consultez le billet de blog d’origine.
Version introduite
3.0
Ancien comportement
Les applications ASP.NET Core peuvent s’exécuter sur .NET Core ou .NET Framework.
Nouveau comportement
Les applications ASP.NET Core ne peuvent s’exécuter que sur .NET Core.
Action recommandée
Effectuez l'une des opérations suivantes :
- Conservez votre application sur ASP.NET Core 2.1.
- Migrez votre application et vos dépendances vers .NET Core.
Catégorie
ASP.NET Noyau
API affectées
Aucun