Back to "Comprendre le pipeline de base ASP.NET Demande et réponse - Partie 1 : Aperçu et fondement"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

AI-Article ASP.NET ASP.NET Lifecycle

Comprendre le pipeline de base ASP.NET Demande et réponse - Partie 1 : Aperçu et fondement

Sunday, 09 November 2025

Présentation

Le pipeline de demande et de réponse ASP.NET Core est l'épine dorsale de chaque application web construite sur ce cadre.

Il est essentiel de comprendre comment une demande circule à travers votre application et comment les réponses sont générées pour créer des applications Web efficaces, durables et sécurisées.

Cette série vous guidera à travers chaque couche du pipeline, depuis le moment où une requête HTTP arrive sur votre serveur jusqu'au moment où la réponse est renvoyée au client.

Que vous construisiez des API, des applications web ou des microservices, le pipeline est toujours là, travaillant dans les coulisses.

En le comprenant profondément, vous serez en mesure d'optimiser les performances, de mettre en œuvre des questions transversales avec élégance et de résoudre les problèmes plus efficacement.

REMARQUE: Ceci fait partie de mes expériences avec l'IA / un moyen de dépenser 1000 $ Code Calude crédits Web.**J'ai alimenté ça un BUNCH de papiers, ma compréhension, des questions que j'ai dû générer cet article.**C'est amusant et il comble un vide que je n'ai pas vu comblé nulle part ailleurs.

  1. **Qu'est-ce que le pipeline Request?**À son cœur, le pipeline de requêtes ASP.NET Core est une série de composants qui traitent les requêtes HTTP et génèrent des réponses HTTP.
  2. **Pensez-y comme une courroie transporteuse dans une usine : la demande entre à une extrémité, passe par diverses stations (composantes) qui examinent, modifient ou agissent sur elle, et finalement une réponse émerge à l'autre extrémité.**Cette architecture est basée sur la
  3. modèle d'intergiciel, lorsque chaque composant (milieu) a une responsabilité spécifique et peut:

Traitement de la demande entrante

avant de le passer au composant suivant

flowchart TB
    OS[Operating System and Network TCP IP Socket Layer]
    Kestrel[Kestrel Web Server HTTP11 HTTP2 HTTP3 QUIC TLS SSL Termination Connection Management]
    Host[Host Layer Application Lifetime Dependency Injection Configuration Logging]

    subgraph Middleware_Pipeline [Middleware Pipeline]
        EH[Exception Handler Middleware catches exceptions]
        HTTPS[HTTPS Redirection Middleware redirects HTTP to HTTPS]
        Static[Static Files Middleware serves static content]
        Routing[Routing Middleware matches request to endpoint]
        AuthN[Authentication Middleware validates identity]
        AuthZ[Authorization Middleware validates permissions]
        Custom[Custom Middleware app specific logic]
        EndpointMW[Endpoint Middleware executes matched endpoint]
    end

    EndpointExec[Endpoint Execution MVC Controllers and Actions Razor Pages Minimal APIs gRPC SignalR]
    Response[Response Generation flows back through middleware]
    BackKestrel[Back to Kestrel]
    Client[Back to Client]

    OS --> Kestrel --> Host --> EH --> HTTPS --> Static --> Routing --> AuthN --> AuthZ --> Custom --> EndpointMW --> EndpointExec --> Response --> BackKestrel --> Client

A court-circuiter le pipeline

en générant une réponse immédiatement

Traitement de la réponse sortante

après l'exécution du composant suivant

L'architecture de haut niveau

Visualisons l'architecture complète du pipeline dans ASP.NET Core 8:

  • Déroulement de la demande : un voyage à travers le pipeline
  • Suivons une requête HTTP typique lorsqu'elle traverse le pipeline :
    1. Le Conseil de l'Europe a adopté une résolution du Conseil de l'Europe sur la situation des droits de l'homme dans le monde.HttpContextCouche réseau
  • Lorsqu'un client fait une requête à votre application, il arrive sous forme de paquets TCP/IP bruts sur votre serveur.

La pile réseau du système d'exploitation assemble ces paquets en une requête HTTP complète.

  1. Le Président. — L'ordre du jour appelle le rapport (doc.
  • Serveur Web Kestrel
  • Kestrel, le serveur web multiplateforme d'ASP.NET Core, reçoit la demande.
  • Qu'est-ce qu'il y a ?
  • Analyse le protocole HTTP (HTTP/1.1, HTTP/2 ou HTTP/3)

Gestion du décryptage TLS/SSL si HTTPS est utilisé

Crée un

  • objet qui représente à la fois la demande et la réponseHttpContext
  • Passe le contrôle à l'intergiciel de l'application
    1. Les droits de l'homme sont garantis par le Pacte international relatif aux droits économiques, sociaux et culturels.
  • Couche de l'hôte
  • L'hôte fournit l'environnement d'exécution.

C'est...

Gère la durée de vie de l'application

  • Fournit le contenant d'injection de dépendance
  • Configuration des fournitures et infrastructure d'exploitation forestière
  • Invoque le pipeline du middleware
    1. Le Président. — L'ordre du jour appelle le rapport (doc.
  • Pipeline Middleware

C'est là que commence votre logique d'application.

Chaque composant du middleware :

Reçoit le

  • Exécute sa fonction spécifique
  • Décide d'appeler le prochain intergiciel ou court-circuit
  • Peut modifier la requête avant de la transmettre
  • Peut modifier la réponse après son retour

5.

sequenceDiagram
    autonumber
    participant Client
    participant OS as OS/Network
    participant Kestrel
    participant Host
    participant MW as Middleware Pipeline
    participant Endpoint as Endpoint Execution

    Client->>OS: HTTP request
    OS->>Kestrel: Forward request
    Kestrel->>Host: Create HttpContext
    Host->>MW: Invoke pipeline
    MW->>Endpoint: Route matched, execute
    Endpoint-->>MW: Response
    MW-->>Kestrel: Response after post-processing
    Kestrel-->>OS: Send HTTP response
    OS-->>Client: Response delivered

Exécution en bout de ligne

Si la requête le fait à travers tous les middleware, il atteint un point final:

Une action du contrôleur en MVCHttpContextUn gestionnaire de page dans Pages Razor

public abstract class HttpContext
{
    // The incoming request
    public abstract HttpRequest Request { get; }

    // The outgoing response
    public abstract HttpResponse Response { get; }

    // User identity and authentication
    public abstract ClaimsPrincipal User { get; set; }

    // Request-scoped services
    public abstract IServiceProvider RequestServices { get; set; }

    // Connection information
    public abstract ConnectionInfo Connection { get; }

    // WebSocket support
    public abstract WebSocketManager WebSockets { get; }

    // Request cancellation
    public abstract CancellationToken RequestAborted { get; set; }

    // Session state
    public abstract ISession Session { get; }

    // Generic feature collection
    public abstract IFeatureCollection Features { get; }

    // And more...
}

Un gestionnaire de route dans les API MinimalHttpContext.

Une méthode de service GRPC

Une méthode de moyeu signalR

// Basic middleware signature
public delegate Task RequestDelegate(HttpContext context);

// Middleware can be implemented as a method
app.Use(async (context, next) =>
{
    // Do something before the next middleware
    Console.WriteLine($"Request: {context.Request.Path}");

    // Call the next middleware
    await next(context);

    // Do something after the next middleware
    Console.WriteLine($"Response: {context.Response.StatusCode}");
});

Le paramètre exécute votre logique d'affaires et génère une réponse.

public delegate Task RequestDelegate(HttpContext context);

Débit de réponse

La réponse revient à travers le pipeline du middleware à l'envers:

Chaque intergiciel peut inspecter ou modifier la réponse

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

// Middleware 1: Logging
app.Use(async (context, next) =>
{
    Console.WriteLine($"[{DateTime.UtcNow:yyyy-MM-dd HH:mm:ss}] Request started: {context.Request.Method} {context.Request.Path}");

    await next(context);

    Console.WriteLine($"[{DateTime.UtcNow:yyyy-MM-dd HH:mm:ss}] Request finished: {context.Response.StatusCode}");
});

// Middleware 2: Custom header
app.Use(async (context, next) =>
{
    context.Response.Headers["X-Custom-Header"] = "Hello from middleware!";

    await next(context);
});

// Middleware 3: Short-circuit for specific path
app.Use(async (context, next) =>
{
    if (context.Request.Path == "/health")
    {
        context.Response.StatusCode = 200;
        await context.Response.WriteAsync("Healthy");
        return; // Short-circuit - don't call next()
    }

    await next(context);
});

// Endpoint
app.MapGet("/", () => "Hello World!");

app.Run();

Les en-têtes sont finaliséshttp://localhost:5000/Le corps de réponse est écrit

Console output:
[2024-01-15 10:30:45] Request started: GET /
[2024-01-15 10:30:45] Request finished: 200

Browser output:
Hello World!

Response headers:
X-Custom-Header: Hello from middleware!

Kestrel renvoie la réponse HTTP au clienthttp://localhost:5000/health:

Console output:
[2024-01-15 10:30:50] Request started: GET /health
[2024-01-15 10:30:50] Request finished: 200

Browser output:
Healthy

Response headers:
X-Custom-Header: Hello from middleware!

Diagramme de séquence des demandes/réponses/healthConcepts clés

HttpContext

Les

  1. **est l'objet central dans le pipeline.**Il encapsule:

  2. Tout ce que vous devez savoir sur la demande actuelle et tout ce que vous avez besoin pour construire la réponse est accessible à traversMilieux de travail

  3. **Middleware est le bloc de construction du pipeline.**À sa plus simple, le middleware est une fonction qui traite une requête:

  4. Demander aux déléguésUn délégué de requête est une fonction qui peut traiter une requête HTTP.

  5. **L'ensemble du pipeline de middleware est construit à partir d'une chaîne de délégués de demande:**Chaque intergiciel enveloppe le prochain délégué, créant une chaîne imbriquée d'appels.

Un exemple simple

Voyons une application ASP.NET Core 8 minimale qui démontre le pipeline :

Quand vous visitez

  • **, vous verrez :**Quand vous visitez

  • Remarquez comment le troisième middleware court-circuité le pipeline pour lechemin, mais tous les intergiciels avant qu'il ne soit encore exécuté.

  • Pourquoi comprendre l'importance de l'oléoducLa compréhension du pipeline est essentielle parce que :

  • Optimisation des performances: Connaître l'ordre d'exécution vous aide à placer les opérations coûteuses correctement et éviter le travail inutile.

  • Préoccupations croisées: Middleware est parfait pour mettre en œuvre l'enregistrement, l'authentification, le traitement des erreurs, et d'autres préoccupations qui affectent toutes les requêtes.IStartupFilter, IHostedServiceDéboguement

: Quand quelque chose tourne mal, comprendre le pipeline vous aide à identifier l'endroit où le problème s'est produit.

  • Extensions personnalisées
  • : Vous pouvez créer de puissants intergiciels personnalisés pour étendre les capacités du framework.
  • HttpContextSécurité
  • : Il est essentiel de comprendre comment l'authentification et l'autorisation s'inscrivent dans le pipeline pour sécuriser votre application.
  • Qu'est-ce qu'il y a ?

Dans cette première partie, nous avons établi la base en comprenant ce qu'est le pipeline, comment il est structuré et comment les demandes passent à travers lui.

logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.