Partager via


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.

Blazor-for-ASP-NET-Web-Forms-Developers eBook cover thumbnail.

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.

pipeline

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é.