ASP.NET कोर निवेदन और प्रतिक्रिया पाइपलाइन को समझना | - | भाग |1: | परिदृश्य तथा आधार
परिचय
ASP.NET कोर अनुरोध और प्रतिक्रिया पाइपलाइन इस फ्रेमवर्क पर निर्मित प्रत्येक वेब अनुप्रयोग का आधार है।
चाहे आप API निर्मित कर रहे हों, या वेब अनुप्रयोगों का निर्माण कर रहे हैं, या माइक्रोसॉफ्टवेयर का निर्माण करने वाले हों, अथवा माइक्रो-सॉफ़्टवेयर के निर्माण कर रही हों, तो पाइपलाइन हमेशा मौजूद है।
नोट: यह मेरे प्रयोगों का हिस्सा है AI के साथ / खर्च करने के लिए एक तरीका है।
अनुरोध पाइपलाइन क्या है
इसके कोर में-एमएसके0-एपीएस-एम एसके1-नेट कोर निवेदन पाइपलाइन एक श्रृंखला है जो एचटीटीपी अनुरोधों को संसाधित करती है और एचटीपी प्रतिक्रियाएं उत्पन्न करती है। इसे फैक्टरी में एक कनवेयर बेल्ट के रूप में समझें।
यह वास्तुकला पर आधारित है मिडिलवेयर पैटर्न, जहां प्रत्येक घटक को एक विशिष्ट उत्तरदायित्व है और कर सकता है
- आने वाले अनुरोध को प्रक्रमित करें अगले अवयव में इसे पास करने से पहले
- छोटा-पाईपलाइन परिपथ तुरंत एक प्रतिक्रिया उत्पन्न करके
- बाहर निकलने वाले प्रतिक्रिया को प्रक्रिया करें अगले घटक को निष्पादित करने के बाद
उच्च---स्तरीय वास्तुकला
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
मांग प्रवाह: पाइपलाइन के माध्यम से यात्रा
पाइपलाइन के माध्यम से यात्रा करते समय एक विशिष्ट HTTP अनुरोध का अनुसरण करें
1. नेटवर्क परत
जब कोई क्लाइंट आपके अनुप्रयोग को अनुरोध करता है, तो यह आपके सर्वर पर कच्चे TCP के रूप में आ जाता है।
2. केस्ट्रेल वेब सर्वर
केस्ट्रेल0 ASP1 नेट कोर2 क्रॉस - प्लेटफार्म वेब सर्वर, अनुरोध प्राप्त करता है
- HTTP प्रोटोकॉल को पद वर्णन करता है (HTTP/1.1, HTTPM SK2 या HTTP /3)
- यदि HTTPS का उपयोग किया जाता है तो TLS/SSL डिक्रिप्शन ह्यान्डल करता है
- एक बनाता है
HttpContextऑब्जेक्ट जो अनुरोध और जवाब दोनों का प्रतिनिधित्व करता है - अनुप्रयोग के माध्यमware पाइपलाइन में नियंत्रण चलाता है
3. होस्ट परत
होस्ट निष्पादन परिवेश प्रदान करता है
- अनुप्रयोग जीवनकाल का प्रबंधन करता है
- निर्भरता इंजेक्शन कन्टेनर प्रदान करता है
- आपूर्ति कॉन्फ़िगरेशन और लॉगिंग अवसंरचना
- मिडलवेयर पाइपलाइन बुलाता है
4. मिडलवेयर पाइपलाइन
यह है जहाँ आपका अनुप्रयोग तर्क आरंभ होता है
- प्राप्त करता है
HttpContext - अपने विशिष्ट कार्य निष्पादित करता है
- तय करता है कि क्या अगले मिडलवेयर को कॉल करें या छोटा-circuit
- इसे आगे भेजने से पहले अनुरोध को परिवर्धित कर सकता है
- यह वापस आने के बाद प्रतिक्रिया को परिवर्धित कर सकता है
5. अंतबिंदु निष्पादन
यदि अनुरोध सभी मेडवेअर के माध्यम से करता है तो यह एक अंत बिंदु तक पहुँचता है
- एमवीसी में एक नियंत्रक क्रिया
- रजोर पृष्ठों में एक पृष्ठ हैंडलर
- न्यूनतम APIs में एक पथ हैंडलर
- जीआरपीसी सेवा विधि
- एक सिग्नलआर हाब विधि
अंतबिंदु आपके व्यापार तर्क निष्पादित करता है और एक प्रतिक्रिया उत्पन्न करता है
6. प्रतिक्रिया प्रवाह
प्रतिक्रिया विपरीत में मध्यवर्ती उपकरण पाइपलाइन के माध्यम से वापस प्रवाहित होती है
- प्रत्येक मध्यवर्ती उपकरण प्रतिक्रिया का निरीक्षण या परिमार्जन कर सकता है
- हेडर अंतिम रूप दिया गया है
- प्रतिक्रिया निकाय लिखा गया है
- केस्ट्रेल क्लाइंट को HTTP प्रतिक्रिया वापस भेजता है
Request/Response अनुक्रम रेखाचित्र
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
प्रमुख संकल्पनाएं
एचटीटीपी संदर्भ
HttpContext पाइपलाइन में केंद्रीय वस्तु है
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...
}
मौजूदा अनुरोध के बारे में सब कुछ आपको जानने की जरूरत है और आप प्रतिक्रिया बनाने के लिए आवश्यक सभी चीजें के माध्यम से उपलब्ध हैं HttpContext.
मिडलवेयर
मिडलवेयर पाइपलाइन का निर्माण खंड है
// 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}");
});
प्रत्यायोजनों का अनुरोध करें
एक अनुरोध डेलिगेट, एक प्रकार्य है जो HTTP अनुरोध को प्रक्रमित कर सकता है
public delegate Task RequestDelegate(HttpContext context);
प्रत्येक मिडवेअर अगले डेलिगेट को बेरता है
एक सरल उदाहरण
Let's एक न्यूनतम ASP.\NET Core \8\ अनुप्रयोग देखें जो पाइपलाइन को प्रदर्शित करता है
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!
जब आप यहां जाते हैं 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!
ध्यान दें कि कैसे तीसरा मध्यवर्ती short-के लिए पाइपलाइन परिचालित /health पथ, लेकिन यह अभी भी निष्पादित करने से पहले सभी मध्यस्थवेयर
पाइपलाइन को समझना क्यों महत्वपूर्ण है
पाइपलाइन को समझना महत्वपूर्ण है क्योंकि
निष्पादन अनुकूलननिष्पादन के क्रम को जानने से आपको महंगे कार्यों को उचित रूप से स्थानांतरित करने में मदद मिलती है और अनावश्यक काम से बचता है
क्रॉस---कुटिंग चिंताएंलॉगिंग को लागू करने के लिए मिडलवेयर पूर्ण है
डिबगिंगजब कुछ गलत हो जाता है
मनपसंद विस्तारYou can create powerful custom middleware to extend the framework
सुरक्षाअपने अनुप्रयोग को सुरक्षित करने के लिए यह जानना आवश्यक है कि प्रमाणीकरण और प्राधिकृति पाइपलाइन में कैसे फिट हो
क्या है
इस पहले भाग में हम पाईपलाइन क्या है यह समझने के द्वारा आधार स्थापित किया है
इस श्रृंखला के आने वाले भागों में हम प्रत्येक परत में गहराई में डुबो देंगे
भाग 2: सर्वर और होस्टिंग परत हम केस्ट्रेल कॉन्फ़िगरेशन का पता लगाएँगे
भाग 3: मिडलवेयर पाइपलाइन - हम'बिल्ड की जाँच करेंगे। -में मिडिलवेयर में; ,; मनपसंद मिडीलवयर बनाने के लिए सीखेंगे।
भाग 4: रूटिंग और अंतबिंदु हम पता लगाएंगे कि कैसे अनुरोध अंतबिंदुओं के साथ मिलते हैं और कैसे अंतबिन्दु रूटिंग प्रणाली काम करता है
भाग 5: MVC, Razor PagesM SK2 और न्यूनतम APIs हम कैसे विभिन्न अनुप्रयोग मॉडल पाइपलाइन के भीतर निष्पादन का पता लगाएँगे
भाग 6: उन्नत पाइपलाइन Hooks हम उन्नत विस्तार बिंदुओं के बारे में सीखेंगे जैसे
IStartupFilter,IHostedService, और अनुकूल अंतबिंदु डेटा स्रोत
कुंजी ले जाने वाले
- ASP.NET कोर पाइपलाइन मेडवेअर अवयवों की श्रृंखला है जो अनुरोध प्रक्रिया करता है और प्रतिक्रियाएं उत्पन्न करता है
- मिडलवेयर अनुरोधों को संसाधित कर सकता है
HttpContextसभी अनुरोध और प्रतिक्रिया सूचना समाहित केंद्रीय वस्तु है- पाइपलाइन को समझना प्रभावी, सुरक्षित और संरक्षित अनुप्रयोगों के निर्माण के लिए अनिवार्य है
- पाइपलाइन मेडवेअर के माध्यम से सर्वर परत से अंतबिंदुओं और वापस में प्रवाहित होती है
पाइपलाइन अपनी सरलता में elegant है लेकिन अपने क्षमताओं में शक्तिशाली है।