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
Το αίτημα και ο αγωγός απόκρισης ASP.NET Core είναι η ραχοκοκαλιά κάθε διαδικτυακής εφαρμογής που βασίζεται σε αυτό το πλαίσιο.
Κατανοώντας πώς ένα αίτημα ρέει μέσω της εφαρμογής σας και πώς παράγονται οι απαντήσεις είναι ζωτικής σημασίας για την οικοδόμηση αποτελεσματικών, συντηρήσιμων και ασφαλών εφαρμογών ιστού.
Αυτή η σειρά θα σας καθοδηγήσει μέσα από κάθε στρώμα του αγωγού, από τη στιγμή που ένα αίτημα HTTP φτάνει στον διακομιστή σας μέχρι όταν η απάντηση αποστέλλεται πίσω στον πελάτη.
Κατανοώντας βαθιά, θα είστε σε θέση να βελτιστοποιήσετε την απόδοση, να εφαρμόσετε cross-cuting ανησυχίες κομψά, και να αντιμετωπίσετε προβλήματα πιο αποτελεσματικά.
ΣΗΜΕΙΩΣΗ: Αυτό είναι μέρος των πειραμάτων μου με AI / ένας τρόπος για να περάσετε $ 1000 Calude Code Web πιστώσεις.**Έχω ταΐσει αυτό ένα σωρό χαρτιά, καταλαβαίνω, ερωτήσεις που έπρεπε να δημιουργήσω αυτό το άρθρο.**Έχει πλάκα και γεμίζει ένα κενό που δεν έχω δει να γεμίζει πουθενά αλλού.
πριν το περάσετε στο επόμενο συστατικό
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
με τη δημιουργία άμεσης απάντησης
μετά την εκτέλεση του επόμενου συστατικού
Ας απεικονίσουμε την πλήρη αρχιτεκτονική αγωγών στο ASP.NET Core 8:
HttpContextΣτρώμα δικτύουΔημιουργεί ένα
HttpContextΔιαχείριση της διάρκειας ζωής της εφαρμογής
Εδώ ξεκινάει η λογική της εφαρμογής σου.
Λήψη της
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
Δράση ελεγκτή στο MVCHttpContextΧειριστής σελίδων σε σελίδες 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...
}
Χειριστής διαδρομής στο Minimal APIsHttpContext.
Μέθοδος κόμβου SignerR
// 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);
Ροή απόκρισης
Κάθε μεσαίο λογισμικό μπορεί να επιθεωρήσει ή να τροποποιήσει την απάντηση
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();
Οι κεφαλίδες έχουν οριστικοποιηθεί.http://localhost:5000/Το σώμα απάντησης είναι γραμμένο
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 στέλνει την απάντηση HTTP πίσω στον πελάτη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!
Διάγραμμα ακολουθίας αίτησης/αποστολής/healthΒασικές έννοιες
Η
**είναι το κεντρικό αντικείμενο στον αγωγό.**Ενσωματώνεται:
Όλα όσα πρέπει να ξέρετε για το τρέχον αίτημα και όλα όσα χρειάζεστε για να οικοδομήσουμε την απάντηση είναι προσβάσιμα μέσωΜεσαίο λογισμικόName
**Το Middleware είναι το δομικό στοιχείο του αγωγού.**Στην απλούστερη, μεσαίο λογισμικό του είναι μια λειτουργία που επεξεργάζεται ένα αίτημα:
Αίτημα αντιπροσώπωνΈνας εκπρόσωπος αίτησης είναι μια λειτουργία που μπορεί να επεξεργαστεί ένα αίτημα HTTP.
**Ολόκληρος ο μεσαίος αγωγός είναι φτιαγμένος από μια αλυσίδα αντιπροσώπων:**Κάθε μεσαίο λογισμικό τυλίγει τον επόμενο αντιπρόσωπο, δημιουργώντας μια φωλιασμένη αλυσίδα κλήσεων.
Ας δούμε μια ελάχιστη εφαρμογή ASP.NET πυρήνα 8 που αποδεικνύει τον αγωγό:
Όταν επισκέπτεσαι
**, θα δείτε:**Όταν επισκέπτεσαι
Παρατηρήστε πώς το τρίτο μεσαίο λογισμικό βραχυκύκλωσε τον αγωγό για τομονοπάτι, αλλά όλα τα μέσα ενημέρωσης πριν ακόμη εκτελεστεί.
Γιατί να Κατανοούμε τα Ζητήματα του ΔιασωλήνουΗ κατανόηση του αγωγού είναι ζωτικής σημασίας επειδή:
Βελτιστοποίηση απόδοσης: Γνωρίζοντας τη σειρά εκτέλεσης σας βοηθά να τοποθετήσετε δαπανηρές λειτουργίες κατάλληλα και να αποφύγετε περιττή εργασία.
Διασταυρούμενες ανησυχίες: Το Middleware είναι ιδανικό για την εφαρμογή καταγραφής, ταυτοποίησης, χειρισμού σφαλμάτων και άλλων ανησυχιών που επηρεάζουν όλα τα αιτήματα.IStartupFilter, IHostedServiceΑποσφαλμάτωση
HttpContextΑσφάλειαΣε αυτό το πρώτο μέρος, έχουμε δημιουργήσει το θεμέλιο κατανοώντας τι είναι ο αγωγός, πώς είναι δομημένος, και πώς τα αιτήματα ρέουν μέσα από αυτόν.
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.