Le middleware ne reporte plus vers le point de terminaison avec le délégué de demande Null

Comme détaillé dans https://github.com/dotnet/aspnetcore/issues/42413, le middleware de service de fichiers (DefaultFilesMiddleware, DirectoryBrowserMiddlewareet StaticFileMiddleware) a été mis à jour pour ne plus entraîner d’opération inefficace (autrement dit, différer au prochain intergiciel dans le pipeline) lorsqu’il existe un point de terminaison actif avec un délégué de requête null.

Version introduite

ASP.NET Core 7.0

Comportement précédent

Auparavant, si la requête actuelle avait un point de terminaison actif, autrement dit HttpContext.GetEndpoint() != null, l’intergiciel de service de fichiers n’effectuerait aucune action et déléguerait simplement au middleware suivant dans le pipeline de requête.

Nouveau comportement

L’intergiciel de service de fichiers n’effectue désormais aucune action s’il existe un point de terminaison actif et que sa valeur de propriété RequestDelegate n’est pas null, autrement dit, HttpContext.GetEndpoint()?.RequestDelegate is not null.

Type de changement cassant

Cette modification affecte la compatibilité binaire.

Raison du changement

Cette modification permet aux points de terminaison de partager des métadonnées avec un intergiciel prenant en compte les points de terminaison tout en autorisant d’autres intergiciels qui seraient autrement différés pour fonctionner également. Les points de terminaison peuvent être actifs dans la requête à des fins de définition et de partage de métadonnées avec middleware prenant en charge les points de terminaison afin qu’ils puissent effectuer leur fonction prévue. D’autres intergiciels qui différeraient auparavant leur comportement lorsqu’un point de terminaison était actif, par exemple, le middleware de service de fichiers, peuvent également fonctionner.

Par exemple, un point de terminaison avec un délégué de demande null contenant des métadonnées d’autorisation peut être défini comme point de terminaison actif pour une demande. Cela fait en sorte que AuthorizationMiddleware applique des exigences d’autorisation qui, si elles sont satisfaites, permettrait au StaticFileMiddleware de traiter les fichiers demandés.

Si vous vous appuyez sur la définition d’un point de terminaison actif sur la demande pour supprimer le comportement du middleware de service de fichiers, vérifiez que le point de terminaison a une valeur non Null définie pour sa propriété RequestDelegate.

API affectées

  • IApplicationBuilder.UseStaticFiles()
  • IApplicationBuilder.UseDefaultFiles()
  • IApplicationBuilder.UseDirectoryBrowser()