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
Sunday, 09 November 2025
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.
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.
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
en générant une réponse immédiatement
après l'exécution du composant suivant
Visualisons l'architecture complète du pipeline dans ASP.NET Core 8:
HttpContextCouche réseauCrée un
HttpContextGère la durée de vie de l'application
C'est là que commence votre logique d'application.
Reçoit le
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
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 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}");
});
public delegate Task RequestDelegate(HttpContext context);
Débit de réponse
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
Les
**est l'objet central dans le pipeline.**Il encapsule:
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
**Middleware est le bloc de construction du pipeline.**À sa plus simple, le middleware est une fonction qui traite une requête:
Demander aux déléguésUn délégué de requête est une fonction qui peut traiter une requête HTTP.
**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.
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
HttpContextSécurité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.
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.