Основний запит і трубопровод ASP.NET є основою всіх веб- програм, побудованих на цій схемі.
Розуміння того, як відбувається запит за допомогою вашої програми, і як створюються відповіді, має вирішальне значення для ефективного створення, підтримання та безпеки веб-застосувань.
За допомогою цієї серії ви зможете пройти через кожен шар каналу, від моменту, коли на ваш сервер з' являється запит HTTP, до того часу, коли відповідь буде надіслано клієнту.
Завдяки глибокому розумінню ви зможете оптимізувати швидкодію, опановувати поперечні похибки та більш ефективно вирішувати проблеми.
ЗАУВАЖЕННЯ: це частина моїх експериментів з ШІ / способом витратити 100 000 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
негайно створює відповідь
після виконання наступного компонента
Давайте уявимо всю архітектуру трубопроводу в ISP 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
Дія контролера у MVCNameHttpContextІнструмент обробки сторінок на сторінках RazorName
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...
}
Програма для обробки маршрутів у мінімальних APIHttpContext.
Метод сигнального зв' язкуName
// 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!
Kerstrel надсилає відповідь 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!
Запит/ Діаграма послідовностей Respons/healthКоординати ключів
The
**є центральним об'єктом трубопроводу.**Вона впорядковує:
Все, що вам потрібно знати про поточний запит і все, що потрібно для побудови відповіді, доступне черезMiddleware
**Середнє обладнання - це будівельний блок трубопроводу.**У найпростішому випадку, середня програма - це функція, яка обробляє запит:
Запит на ДелегатівДелегат запиту - це функція, яка може працювати з запитом HTTP.
**Цілий трубопровод "Сіднеобслуговування" збудований з ланцюга просьбних делегатів:**Кожен делегат у середній частині програми огортає список голосів наступного делегата.
Давайте розглянемо мінімальну програму ASP.NET Core 8, яка продемонструє трубопровод:
Коли відвідуєте
**, побачиш:**Коли відвідуєте
Завважте, як третя середня система скоротила трубопровод дляшлях, але все середнє програмне забезпечення перед його виконанням.
Навіщо розуміти суть трубопроводуРозуміння трубопроводу має важливе значення, тому що:
Оптимізація швидкодії: Знання порядку виконання цього завдання допомагає вам правильно проводити дорогі операції і уникати непотрібної праці.
Схвальні переживання: Середнє забезпечення є досконалим для впровадження журналу, розпізнавання, обробки помилок та інших проблем, які стосуються всіх запитів.IStartupFilter, IHostedServiceЗневадження
HttpContextБезпекаУ цій першій частині ми заснували базу, розуміючи, що таке трубопровод, як він структурований, і як через нього проходять запити.
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.