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
Understanding the ASP.NET Core Request and Response Pipeline | - Part | 1: översikt och grund
Wednesday, 28 October 2026
Inleiding
ASP.NET Core applikations- och responskedjan är bakdelen av varje webbapplikation som bygger på den här ramverket.
Vare sig du designar APIs, ,, webbapplikationer,, eller mikrotjänster, , så finns pipelinen alltid där. ,, som jobbar bakom kulisserna.., genom att förstå det noggrant.
NOTET: Det här är en del av mina experiment med AI ♫ / ♫ ett sätt att spendera ♫$1000 ♫ Kaludkod webbkrediter ♫ . ♫ Jag ♫' ♫ har matat in det här med en massa papper ♫ , ♫ mitt förståelse ♫ SMK6 ♫ frågor jag var tvungen att skapa den här artikeln ♫ MVK7 ♫ Den ♫ SKK8 ♫ är roligt och fyller ett hål som jag inte sett ♫ SVK9 ♫ nån annanstans fyllt ♫
Vad är begäran Pipeline?
I dess kärna, ,, är ASP: s, ., NET: s kärnredning en serie komponenter som bearbetar och genererar HTTP-uppkopplingar.
Den här arkitekturen är baserad på mellanvara-mönster, där varje komponent
- Bearbeta den inkomende begäran innan den går vidare till nästa komponent
- Kort-sluta pipelinen genom att ge ett svar omedelbart
- Processera den utgående reaktionen efter att nästa komponent har lösts
Höga---nivån arkitektur
Låt oss visualisera den kompletta pipelinearchitekturen i ASP
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
Request Flow: En resa genom kanalen
Låt's följa en typisk HTTP-fråga medan den passerar genom pipelinen:
1. nätverkslayer
När en klient gör en begäran till din application, kommer den som rå TCP, /, IP-paket på din server.
2. Kestrel-webserver
Kestrel, ASP . NET Core ' plattformutrymmet
- Analycerar HTTP-protokollet (HTTP/1.1, HTTPM SK2 eller HTTP /3)
- Handler TLS/SSL-dekription om HTTPS används
- Skeplar en
HttpContextobjekt som representerar både begäran och svaret - Passar kontrollen till applikationen
3. Gidslayer
Hosten tillhandahåller executionsmiljön. It:
- hanterar applikationens livstid
- Geer den beroende injiceringscontainern
- Tillförselkonfiguration och loginfrastruktur
- Aktiverar middleware- pipelinen
4. Middleware Pipeline
Det är här som din applikationslogi börjar.
- får
HttpContext - utför dess specifika funktion
- Bestäms om man ska ringa nästa mellanverk eller korta-krets
- Kan ändra begäran innan den skickas vidare
- Kan ändra svaret efter att den kommer tillbaka
5. Endpoint Execution
Om applikationen gör det genom all middleware, kommer den till en slutpunkt.
- En kontrollaktion i MVC
- En webblädare i Razor Pages
- En maršrutbehandlare i Minimal APIs
- En gRPC-servicemetod
- En SignalR-hub-metod
Slutpunkten utför din affärslogi och genererar ett svar.
6. Reaktionsflöde
Reaktionen flödar tillbaka genom middleware pipelinen i omvänd
- Varje mellanprogram kan inspektera eller modifiera svaret
- Påskriftar är slutgiltiga
- Reaktionsorganet är skrivet
- Kestrel skickar tillbaka HTTP: s respons till klienten
Request/Response Sequence Diagram
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
Nyckelkoncepter
HttpKontext
Den HttpContext är huvudobjektet i pipelinen.
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...
}
Allt du behöver veta om den nuvarande begäran och allt du behöver för att bygga upp svaret är tillgängligt via HttpContext.
Mittware
Mittverk är byggstenen till pipelinen.
// 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}");
});
begärande från delegerade
En utmaningsdelegerad är en funktion som kan processa en HTTP utmaning.
public delegate Task RequestDelegate(HttpContext context);
Varje mellanprogram täcker nästa delegerad person, och skapar en inbäddad kedja av sändningar
Ett enkelt exempel
Låt oss se en minimal ASP applikation som demonstrerar pipelinen
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();
När du besöker http://localhost:5000/, du ' ska se
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!
När du besöker http://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!
Titta på hur den tredje mellanvarans korta "-" omkretserade /health path, men alla mellanverk innan den fortfarande gjordes.
Varför är förståelsen för Pipeline viktigt
Understanding of the pipeline is crucial because
Performanceoptimering: Att veta ordning på utförningen hjälper dig placera dyra operationer ordentligt och undvika onödigt arbete
Cross-Skärningsbekymmer: Middleware är perfekt för att implementera inlogning , autentisering M SK2 felhantering , och andra bekymmer som påverkar alla begäran
Debugging: När något går fel
Pasmaakextensioner: Du kan skapa kraftfulla custom middleware för att utöka ramverkets egenskaper
säkerhet: Att förstå hur autentisering och tillstånd passar in i pipelinen är nödvändigt för att säkra din applikation
Vad's Nästa?
I den första delen, ,, har vi byggt grunden genom att förstå vad kanalen är, hur den är strukturerad, och hur krav passerar igenom den.
I de kommande delarna av den här serien kommer vi att dyka djupt in i varje lager
Del 2: Server och hostinglayer - Vi' utforskar Kestrel-konfigurationen , hoststarting M SK3 och hur man anpassar hostingmiljön
Del 3: Middleware Pipeline - Vi ' kommer att undersöka byggda, - i mellanverk, , lära oss att skapa egna mellanverk och förstå mellanverksbeställning.
Del 4: Routering och slutpunkter - Vi ' kommer att upptäcka hur begäran matchas med slutpunkter och hur slutpunkternas routingssystem fungerar
Del 5: MVC, Grödla sidorM SK2 och Minimala APIs - Vi ' utforskar hur olika tillämpningsmodeller utförs inom pipelinen
Del 6: avancerade pippelhukar - Vi ' lär oss om avancerade förlängningspunkter som
IStartupFilter,IHostedService, och individuella datakällor
Ta med era nyckeln
- ASP.NET Core pipeline är en kedja med middleware-komponenter som processar begäran och genererar svar
- Middleware kan bearbeta applikationer, korta - kretsa pipelinen, och ändra svaren
HttpContextär det centrala objektet som innehåller all fråga och svarsinformation- Att förstå rutor är nödvändigt för att bygga effektiva, säkra och underhållbara applikationer
- Pipelinen strömmar från serverlayern genom middleware till slutpunkter och tillbaka
Pipelinet är elegant i sin enkelhet men kraftfullt i sina förmågor.