- بواسطة x32x01 ||
ما هو Middleware في ASP.NET Core؟ 🤔
الـ Middleware هو جزء أساسي في أي تطبيق ASP.NET Core، وبيشتغل جوه حاجة اسمها Request Pipeline.
ببساطة كده 👇
أي طلب HTTP داخل على التطبيق:
كل الحاجات التقيلة بتمر من خلاله، زي:
✅ مع Middleware = تطبيق احترافي وآمن وسريع
➡️ بتحطهم مرة واحدة في Middleware
➡️ ويتطبقوا على كل المشروع أو أجزاء معينة منه
وده بيخلي الكود:
وبالتحديد بعد السطر ده:
✅ لازم يكون أول Middleware
ليه؟ -لأنه مش هيقدر يمسك أخطاء حصلت قبله 👀
الصح 👇
لازم تعرف المستخدم الأول، بعدين تفوضه:
مثال Middleware لتسجيل الطلبات:
ده مفيد جدًا في:
الـ 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 = تطبيق احترافي وآمن وسريع
الهدف الأساسي من استخدام Middleware 🎯
الهدف الرئيسي هو Separation of Concerns يعني بدل ما تحط:- التحقق الأمني
- تسجيل الطلبات
- معالجة الأخطاء
➡️ بتحطهم مرة واحدة في Middleware
➡️ ويتطبقوا على كل المشروع أو أجزاء معينة منه
وده بيخلي الكود:
- أنضف
- أسهل في الصيانة
- أسهل في التوسيع
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
معالجة الاستثناءات (غلط شائع) ⚠️
❌ تحط 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 لما تحتاج