ASP.NET Core Middleware شرح شامل مع أمثلة

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


ليه Middleware مهم جدًا في أي تطبيق؟ 🔥

الـ Middleware هو العمود الفقري لأي تطبيق شغال Production 💪
كل الحاجات التقيلة بتمر من خلاله، زي:
  • Authentication & Authorization
  • Error Handling
  • Logging
  • Performance Optimization
  • Compression
  • Rate Limiting
  • CORS
  • Caching
❌ من غير Middleware = تطبيق شغال وخلاص
✅ مع Middleware = تطبيق احترافي وآمن وسريع


الهدف الأساسي من استخدام Middleware 🎯

الهدف الرئيسي هو Separation of Concerns يعني بدل ما تحط:
  • التحقق الأمني
  • تسجيل الطلبات
  • معالجة الأخطاء
جوه كل Controller 😓
➡️ بتحطهم مرة واحدة في Middleware
➡️ ويتطبقوا على كل المشروع أو أجزاء معينة منه
وده بيخلي الكود:
  • أنضف
  • أسهل في الصيانة
  • أسهل في التوسيع


Middleware بيتكتب فين؟ 📁

في ASP.NET Core الـ Middleware بيتكتب ويتنظم داخل ملف: Program.cs
وبالتحديد بعد السطر ده: var app = builder.Build();


Request Pipeline شغال إزاي؟ 🔄

الاتجاه مهم جدًا 👇
  • الطلب (Request)
    ⬇️ من أول Middleware لآخر واحد
  • الاستجابة (Response)
    ⬆️ من آخر Middleware للأول
⚠️ ترتيب الـ 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
وده بيخلي الأداء أحسن، ويمنع طلبات ملهاش لازمة 🚀


معالجة الاستثناءات (غلط شائع) ⚠️

❌ تحط Exception Middleware في النص
✅ لازم يكون أول Middleware
ليه؟ -لأنه مش هيقدر يمسك أخطاء حصلت قبله 👀
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 لما تحتاج
فهمك للنقطة دي = نقلة كبيرة في مستواك البرمجي 🚀
 
المواضيع ذات الصلة
x32x01
الردود
0
المشاهدات
118
x32x01
x32x01
x32x01
الردود
0
المشاهدات
207
x32x01
x32x01
x32x01
الردود
0
المشاهدات
2K
x32x01
x32x01
x32x01
الردود
0
المشاهدات
1K
x32x01
x32x01
x32x01
الردود
0
المشاهدات
154
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
2,228
المشاركات
2,439
أعضاء أكتب كود
539
أخر عضو
elboureyk
عودة
أعلى