أنا جاي أشرح ببساطة الفرق بين HTTP Request Lifecycle في ASP.NET Framework القديم وASP.NET Core الجديد، والتغييرات الكبيرة اللي حصلت في الـ Pipeline من زمان لحد دلوقتي.
الشرح ده هيخليك تفهم ازاي الطلبات (Requests) بتمشي جوه السيستم وليه ASP.NET Core بقى اختيار أفضل للمطورين دلوقتي.
أولًا: دورة حياة HTTP Request في الإصدار القديم (ASP.NET Framework)
لما العميل يبعت Request زي /Employee/GetAll بيحصل الآتي:
1️⃣ استقبال الريكوست
الـ Web Server (IIS) بيستقبل الريكوست أول حاجة، والـ Pipeline كله جوه IIS، مش جوه الـ Web Application نفسها.
2️⃣ دخول الريكوست للـ Pipeline
الريكوست بيكون معاه حاجتين منفصلتين: HttpRequest و HttpResponse، والاتنين مربوطين بـ System.Web.HttpContext.
هنا المشكلة: الـ Context ضخم جدًا ويحمل حاجات مش محتاجها التطبيق.
3️⃣ المرور على كل Modules / Middlewares
الريكوست لازم يعدّي على كل الـ Modules مهما كان عددهم.
-
هنا ما فيش مرونة حقيقية في التحكم في ترتيبهم.
4️⃣ Routing
يوصل للـ Routing Module ويستخرج:
-
Controller Name
-
Action Name
5️⃣ تحديد الـ Controller والـ Action
يوصل للـ MapControllerRoute اللي بيحوّل الريكوست للـ Controller والـ Action المناسب.
6️⃣ التحكم جوه الـ Controller حسب نوع التطبيق
لو التطبيق MVC:
-
نجيب البيانات من قاعدة البيانات
-
نملأ الـ ViewModel أو الـ Model
-
نبعت الـ Model للـ View
-
نعمل Render للـ View جوه الـ Layout
-
نولد الصفحة النهائية HTML
-
نرجع HTML كـ Response
لو التطبيق Web API:
-
نجيب البيانات من قاعدة البيانات
-
نملأ الـ DTO أو Model
-
نحول النتيجة لـ JSON
-
نرجع JSON Response
7️⃣ الرد بيرجع للـ Pipeline
وبعدين يوصل للـ Browser.
❌ عيوب الإصدار القديم:
-
معتمد على IIS (مش Cross-Platform)
-
HttpContext ضخم وصعب جدًا الاختبار (Testing)
-
Pipeline ثابت ومش مرن
-
أداء أقل (Performance)
-
Architecture تقيل ومركّب
ثانيًا: دورة حياة HTTP Request في الإصدار الجديد (ASP.NET Core)
1️⃣ استقبال الريكوست
الـ Web Server (Kestrel أو IIS) بيستقبل الريكوست ويدخله جوه التطبيق نفسه.
-
هنا الفرق الكبير: الـ Pipeline بقى جوه الـ Application، وانت اللي بتتحكم في ترتيب كل Middleware.
2️⃣ دخول الريكوست للـ Pipeline داخل Program.cs
الـ Pipeline modular ومرن.
3️⃣ HttpContext جديد
الريكوست بيمشي مع HttpContext واحد خفيف، فيه HttpRequest و HttpResponse، يعني Request + Response جزء من Context واحد نضيف.
4️⃣ المرور على Middlwares حسب اختيارك
انت اللي تحدد مين قبل مين، ومين يتحذف أو يتضاف.
5️⃣ الوصول للـ Controller والـ Action
ونفس الخطوات المعروفة:
-
Get Data → Fill Model → Render View أو Return JSON
6️⃣ الرد بيرجع للـ Pipeline بالعكس
وبعدين يوصل للـ Browser.
✔ مميزات الإصدار الجديد:
-
Cross-Platform — شغال على Linux / Windows / macOS
-
Lightweight HttpContext — سهل تعمل عليه Testing
-
Flexible & Modular Pipeline — انت اللي تحدد ترتيب الـ Middleware
-
High Performance — أسرع وأخف في استهلاك الـ Memory
-
Clean & Modern Architecture — مناسب للتطبيقات السحابية (Cloud Apps)
الخلاصة 🎯
الفرق الأساسي إن ASP.NET Core جاب لنا:
-
Pipeline مرن، Modular، وسهل التحكم فيه
-
Context خفيف وسهل الاختبار
-
أداء أعلى وبنية حديثة
-
Cross-platform
باختصار، لو حابب تطبيقات أسرع، مرنة، قابلة للتطوير والاختبار بسهولة، ASP.NET Core هو الاختيار الحالي للمطورين.