- بواسطة x32x01 ||
ما هو Middleware في ASP.NET Core؟ 
الـ Middleware هو جزء أساسي في أي تطبيق ASP.NET Core، وبيشتغل جوه حاجة اسمها Request Pipeline.
ببساطة كده
أي طلب HTTP داخل على التطبيق:

ليه Middleware مهم جدًا في أي تطبيق؟
الـ Middleware هو العمود الفقري لأي تطبيق شغال Production 
كل الحاجات التقيلة بتمر من خلاله، زي:
من غير Middleware = تطبيق شغال وخلاص
مع Middleware = تطبيق احترافي وآمن وسريع
الهدف الأساسي من استخدام Middleware
الهدف الرئيسي هو Separation of Concerns يعني بدل ما تحط:

بتحطهم مرة واحدة في Middleware
ويتطبقوا على كل المشروع أو أجزاء معينة منه
وده بيخلي الكود:
Middleware بيتكتب فين؟
في ASP.NET Core الـ Middleware بيتكتب ويتنظم داخل ملف: Program.cs
وبالتحديد بعد السطر ده:
Request Pipeline شغال إزاي؟
الاتجاه مهم جدًا 
ترتيب الـ Middleware مش رفاهية… ده فرق بين تطبيق شغال وتطبيق بايظ
الترتيب الصح للـ Middleware (Best Practice)
ده شكل شائع واحترافي لترتيب الـ Middleware:
الفرق بين Use و Run و Map
فهم النقطة دي مهم جدًا لأي مبرمج ASP.NET Core 
Short-Circuit: إيقاف الطلب بدري
أحيانًا محتاج توقف الطلب فورًا، زي:

معالجة الاستثناءات (غلط شائع)
تحط Exception Middleware في النص
لازم يكون أول Middleware
ليه؟ -لأنه مش هيقدر يمسك أخطاء حصلت قبله
Authentication و Authorization (ترتيب قاتل)
غلط منتشر جدًا 
الصح 
لازم تعرف المستخدم الأول، بعدين تفوضه:
Custom Middleware (المرحلة الاحترافية)
في المشاريع الكبيرة، Middleware الجاهز مش دايمًا كفاية ساعتها بتكتب Custom Middleware
مثال Middleware لتسجيل الطلبات:
ده مفيد جدًا في:
الخلاصة
لو بتتعلم ASP.NET Core بجد:

الـ Middleware هو جزء أساسي في أي تطبيق ASP.NET Core، وبيشتغل جوه حاجة اسمها Request Pipeline.
ببساطة كده
أي طلب HTTP داخل على التطبيق:
- بيعدي على سلسلة Middleware
- كل Middleware يقدر:
- يقرأ الطلب
- يعدله
- يوقفه
- أو يسيبه يكمل للي بعده
ليه Middleware مهم جدًا في أي تطبيق؟
الـ Middleware هو العمود الفقري لأي تطبيق شغال Production كل الحاجات التقيلة بتمر من خلاله، زي:
- Authentication & Authorization
- Error Handling
- Logging
- Performance Optimization
- Compression
- Rate Limiting
- CORS
- Caching
الهدف الأساسي من استخدام Middleware
الهدف الرئيسي هو Separation of Concerns يعني بدل ما تحط:- التحقق الأمني
- تسجيل الطلبات
- معالجة الأخطاء
وده بيخلي الكود:
- أنضف
- أسهل في الصيانة
- أسهل في التوسيع
Middleware بيتكتب فين؟
في ASP.NET Core الـ Middleware بيتكتب ويتنظم داخل ملف: Program.csوبالتحديد بعد السطر ده:
var app = builder.Build();
Request Pipeline شغال إزاي؟
الاتجاه مهم جدًا - الطلب (Request)
من أول Middleware لآخر واحد - الاستجابة (Response)
من آخر Middleware للأول
الترتيب الصح للـ Middleware (Best Practice)
ده شكل شائع واحترافي لترتيب الـ Middleware: C#:
var app = builder.Build();
app.UseExceptionHandler("/error"); // معالجة الأخطاء
app.UseHttpsRedirection(); // HTTPS
app.UseStaticFiles(); // ملفات ثابتة
app.UseRouting(); // Routing
app.UseCors("DefaultPolicy"); // CORS
app.UseAuthentication(); // Authentication
app.UseAuthorization(); // Authorization
app.UseRateLimiter(); // Rate Limiting
app.MapControllers(); // Endpoints
app.Run();
الفرق بين Use و Run و Map
فهم النقطة دي مهم جدًا لأي مبرمج ASP.NET Core Use()
- بيضيف Middleware
- وبيكمل للي بعده
C#:
app.Use(async (context, next) =>
{
// قبل الطلب
await next();
// بعد الاستجابة
}); Run()
- بيقفل الـ Pipeline
- مفيش بعده Next
C#:
app.Run(async context =>
{
await context.Response.WriteAsync("Hello World");
}); Map()
- بيفرّع الـ Pipeline حسب المسار
C#:
app.Map("/health", appBuilder =>
{
appBuilder.Run(async context =>
{
await context.Response.WriteAsync("Healthy");
});
});
Short-Circuit: إيقاف الطلب بدري
أحيانًا محتاج توقف الطلب فورًا، زي:- Health Check
- Block IP
- Feature Flags
معالجة الاستثناءات (غلط شائع)
ليه؟ -لأنه مش هيقدر يمسك أخطاء حصلت قبله
C#:
app.UseExceptionHandler(errorApp =>
{
errorApp.Run(async context =>
{
context.Response.StatusCode = 500;
await context.Response.WriteAsync("حدث خطأ غير متوقع");
});
});
Authentication و Authorization (ترتيب قاتل)
غلط منتشر جدًا C#:
app.UseAuthorization();
app.UseAuthentication(); // ❌ غلط لازم تعرف المستخدم الأول، بعدين تفوضه:
C#:
app.UseAuthentication();
app.UseAuthorization();
Custom Middleware (المرحلة الاحترافية)
في المشاريع الكبيرة، Middleware الجاهز مش دايمًا كفاية ساعتها بتكتب Custom Middlewareمثال Middleware لتسجيل الطلبات:
C#:
public class RequestLoggingMiddleware
{
private readonly RequestDelegate _next;
public RequestLoggingMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
Console.WriteLine($"Request: {context.Request.Method} {context.Request.Path}");
await _next(context);
Console.WriteLine($"Response: {context.Response.StatusCode}");
}
} - Debugging
- Monitoring
- Security Auditing
الخلاصة 
لو بتتعلم ASP.NET Core بجد:- لازم تفهم Middleware
- لازم تهتم بالترتيب
- لازم تعرف Use / Run / Map
- ولازم تكتب Custom Middleware لما تحتاج