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
المشاهدات
2K
x32x01
x32x01
x32x01
الردود
0
المشاهدات
206
x32x01
x32x01
x32x01
الردود
0
المشاهدات
204
x32x01
x32x01
x32x01
الردود
0
المشاهدات
361
x32x01
x32x01
x32x01
الردود
0
المشاهدات
140
x32x01
x32x01
الوسوم : الوسوم
asp.net core authentication authorization cors custom middleware error handling logging middleware performance optimization request pipeline
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
2,320
المشاركات
2,533
أعضاء أكتب كود
567
أخر عضو
Mohaned
عودة
أعلى