Modules, gestionnaires et intergiciels
Conseil
Ce contenu est un extrait du livre électronique, Blazor pour les développeurs ASP NET Web Forms pour Azure, disponible dans la documentation .NET ou au format PDF à télécharger gratuitement pour le lire hors connexion.
Une application ASP.NET Core repose sur une série d’intergiciels. L’intergiciel est composé de gestionnaires organisés dans un pipeline pour gérer les requêtes et les réponses. Dans une application Web Forms, les gestionnaires et modules HTTP résolvent des problèmes similaires. Dans ASP.NET Core, les modules, les gestionnaires, Global.asax.cs et le cycle de vie de l’application sont remplacés par des intergiciels. Dans ce chapitre, vous allez découvrir les intergiciels dans le contexte d’une application Blazor.
Vue d’ensemble
Le pipeline de requête ASP.NET Core est composé d’une séquence de délégués de requête, appelés l’un après l’autre. Le diagramme suivant illustre le concept. Le thread d’exécution suit les flèches noires.
Le diagramme précédent n’a pas de concept d’événements de cycle de vie. Ce concept est fondamental pour la façon dont les requêtes ASP.NET Web Forms sont gérées. Ce système facilite la raison du processus qui se produit et permet d’insérer des intergiciels à tout moment. L’intergiciel s’exécute dans l’ordre dans lequel il est ajouté au pipeline de requête. Il est également ajouté dans le code au lieu des fichiers de configuration, généralement dans Startup.cs.
Katana
Les lecteurs familiarisés avec Katana se sentiront à l’aise dans ASP.NET Core. En fait, Katana est un framework à partir duquel ASP.NET Core dérive. Il a introduit des modèles d’intergiciels et de pipelines similaires pour ASP.NET 4.x. L’intergiciel conçu pour Katana peut être adapté pour fonctionner avec le pipeline ASP.NET Core.
Intergiciels courants
ASP.NET 4.x inclut de nombreux modules. De la même manière, ASP.NET Core dispose également de nombreux composants d’intergiciels. Les modules IIS peuvent être utilisés dans certains cas avec ASP.NET Core. Dans d’autres cas, l’intergiciel ASP.NET Core natif peut être disponible.
Le tableau suivant répertorie les intergiciels et les composants de remplacement dans ASP.NET Core.
Module | Module ASP.NET 4.x | Option ASP.NET Core |
---|---|---|
Erreurs HTTP | CustomErrorModule |
Middleware (intergiciel) de pages de codes d’état |
Document par défaut | DefaultDocumentModule |
Middleware de fichiers par défaut |
Exploration de répertoires | DirectoryListingModule |
Middleware d’exploration des répertoires |
Compression dynamique | DynamicCompressionModule |
Middleware de compression des réponses |
Suivi des demandes ayant échoué | FailedRequestsTracingModule |
Journalisation ASP.NET Core |
Mise en cache des fichiers | FileCacheModule |
Intergiciel de mise en cache des réponses |
Mise en cache HTTP | HttpCacheModule |
Intergiciel de mise en cache des réponses |
Journalisation HTTP | HttpLoggingModule |
Journalisation ASP.NET Core |
Redirection HTTP | HttpRedirectionModule |
Intergiciel de réécriture d’URL |
Filtres ISAPI | IsapiFilterModule |
Middleware |
ISAPI | IsapiModule |
Middleware |
Filtrage des demandes | RequestFilteringModule |
IRule Middleware de réécriture d’URL |
Réécriture d’URL† | RewriteModule |
Intergiciel de réécriture d’URL |
Compression statique | StaticCompressionModule |
Middleware de compression des réponses |
Contenu statique | StaticFileModule |
Middleware de fichiers statiques |
Autorisation d’URL | UrlAuthorizationModule |
Identité ASP.NET Core |
Cette liste n’est pas exhaustive, mais devrait vous donner une idée des correspondances qui existent entre les deux frameworks. Pour obtenir une liste plus détaillée, consultez Modules IIS avec ASP.NET Core.
Intergiciels personnalisés
Un intergiciel intégré peut ne pas gérer tous les scénarios nécessaires pour une application. Dans ce cas, il est logique de créer votre propre intergiciel. Il existe plusieurs façons de définir l’intergiciel (middleware), le plus simple étant un délégué simple. Examinez l’intergiciel (middleware) suivant, qui accepte une demande de culture d’une chaîne de requête :
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.Use(async (context, next) =>
{
var cultureQuery = context.Request.Query["culture"];
if (!string.IsNullOrWhiteSpace(cultureQuery))
{
var culture = new CultureInfo(cultureQuery);
CultureInfo.CurrentCulture = culture;
CultureInfo.CurrentUICulture = culture;
}
// Call the next delegate/middleware in the pipeline
await next();
});
app.Run(async (context) =>
await context.Response.WriteAsync(
$"Hello {CultureInfo.CurrentCulture.DisplayName}"));
}
}
Le middleware peut également être défini en tant que classe, soit en implémentant l’interface IMiddleware
, soit en suivant la convention d’intergiciel. Pour plus d’informations, consultez Écrire un intergiciel ASP.NET Core personnalisé.