Partager via


Modules, gestionnaires et intergiciels

Conseil / Astuce

Ce contenu est un extrait du livre électronique, Blazor pour les développeurs ASP NET Web Forms pour Azure, disponible sur .NET Docs ou en tant que PDF téléchargeable gratuitement qui peut être lu hors connexion.

Blazor-for-ASP-NET-Web -Forms-Developers miniature de couverture du livre électronique.

Une application ASP.NET Core repose sur une série d’intergiciels. Middleware sont des gestionnaires agencés en pipeline pour gérer les demandes et les réponses. Dans une application Web Forms, les gestionnaires HTTP et les modules résolvent des problèmes similaires. Dans ASP.NET Core, les modules, les gestionnaires, les 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 Blazor application.

Aperçu

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 à la façon dont les requêtes Web Forms ASP.NET sont gérées. Ce système facilite la compréhension du processus en cours et permet l'insertion d'un intergiciel à tout moment. Middleware s’exécute dans l’ordre dans lequel il est ajouté au pipeline de requête. Ils sont également ajoutés dans le code au lieu de 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 une infrastructure à partir de laquelle ASP.NET Core dérive. Il a introduit des modèles de middleware et de pipeline similaires pour ASP.NET 4.x. Le middleware conçu pour Katana peut être adapté pour travailler avec le pipeline ASP.NET Core.

Intergiciels courants

ASP.NET 4.x inclut de nombreux modules. De manière similaire, ASP.NET Core dispose également de nombreux composants middleware disponibles. Les modules IIS peuvent être utilisés dans certains cas avec ASP.NET Core. Dans d’autres cas, le middleware natif ASP.NET Core peut être disponible.

Le tableau suivant répertorie les intergiciels de remplacement et les composants dans ASP.NET Core.

Module Module ASP.NET 4.x Option ASP.NET Core
Erreurs HTTP CustomErrorModule Middleware Status Code Pages
Document par défaut DefaultDocumentModule Middleware de gestion des fichiers par défaut
Exploration de répertoires DirectoryListingModule Intergiciel de navigation d’annuaire
Compression dynamique DynamicCompressionModule Intergiciel de compression de réponse
Suivi des demandes ayant échoué FailedRequestsTracingModule Journalisation ASP.NET Core
Mise en cache des fichiers FileCacheModule Middleware de mise en cache des réponses
Mise en cache HTTP HttpCacheModule Middleware 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 Intergiciel
ISAPI IsapiModule Intergiciel
Filtrage des demandes RequestFilteringModule Intergiciel de réécriture d’URL IRule
Réécriture d’URL† RewriteModule Intergiciel de réécriture d’URL
Compression statique StaticCompressionModule Intergiciel de compression de réponse
Contenu statique StaticFileModule Intergiciel de fichiers statiques
Autorisation d’URL UrlAuthorizationModule identité principale ASP.NET

Cette liste n'est pas exhaustive, mais doit donner une idée de la cartographie existante entre les deux cadres. Pour obtenir une liste plus détaillée, consultez les modules IIS avec ASP.NET Core.

Intergiciel personnalisé

L’intergiciel intégré peut ne pas gérer tous les scénarios nécessaires pour une application. Dans ce cas, il est judicieux de créer votre propre intergiciel. Il existe plusieurs façons de définir le 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}"));
    }
}

L’intergiciel peut également être défini en tant que classe, soit en implémentant l’interface, soit en suivant la IMiddleware convention d’intergiciel. Pour plus d’informations, consultez Écrire un intergiciel ASP.NET Core personnalisé.