.NET Core - Middleware وكيفية استخدامها

6.2 .NET Core - Middleware وكيفية استخدامها

في ‎ASP.NET Core، الـ Middleware هو مكون يعمل في سلسلة المعالجة (Pipeline) ويقوم بالتعامل مع الطلبات والردود (HTTP Request/Response). يمكن استخدام Middleware للتحقق من التوكن، تسجيل الأخطاء، إعادة التوجيه، التحقق من الصلاحيات، أو تعديل الـ Response.


🔹 ما هو Middleware؟

هو كود يتم تنفيذه عند مرور كل طلب HTTP عبر التطبيق. كل Middleware يمكنه:

  • تنفيذ منطق معين قبل تمرير الطلب إلى التالي.
  • إيقاف السلسلة وعدم تمرير الطلب.
  • تنفيذ منطق بعد استلام الرد من الـ Middleware الذي يليه.

🔹 ترتيب الـ Middleware مهم جدًا

في ملف Program.cs، يتم تنفيذ Middleware بنفس ترتيب كتابتها. مثلًا:


app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });

إذا وضعت UseAuthorization() قبل UseAuthentication() فلن يتمكن النظام من معرفة المستخدم أصلاً.

🔹 مثال على Middleware مخصص

لننشئ Middleware يقوم بتسجيل وقت بداية الطلب:


public class LoggingMiddleware
{
    private readonly RequestDelegate _next;

    public LoggingMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        var start = DateTime.Now;
        Console.WriteLine($"[Start] {context.Request.Path} at {start}");

        await _next(context); // تمرير الطلب للمكون التالي

        var end = DateTime.Now;
        Console.WriteLine($"[End] {context.Request.Path} at {end}");
    }
}

ثم نضيفه إلى الـ pipeline:


app.UseMiddleware<LoggingMiddleware>();

🔹 Middlewares شائعة مضمنة في ASP.NET Core

  • UseStaticFiles() — تقديم الملفات الثابتة مثل الصور وCSS.
  • UseRouting() — تحديد المسارات (Endpoints).
  • UseAuthentication() — تنفيذ مصادقة المستخدم.
  • UseAuthorization() — تنفيذ التفويض.
  • UseCors() — تفعيل سياسات CORS.

🔹 الفرق بين Use وRun وMap

  • Use(): يمرر الطلب إلى Middleware التالي.
  • Run(): ينهي السلسلة، ولا يمرر لأي Middleware بعده.
  • Map(): يستخدم لتوجيه الطلبات لمسارات فرعية معينة.

app.Map("/hello", app =>
{
    app.Run(async context =>
    {
        await context.Response.WriteAsync("Hello Mahmoud 👋");
    });
});

🔹 الخلاصة

Middleware هي طريقة مرنة لبناء سلسلة معالجة الطلبات في ASP.NET Core. باستخدام Middleware يمكنك التحكم الكامل في الطلبات والردود، وتخصيص سلوك التطبيق حسب الحاجة.

تعليقات

المشاركات الشائعة من هذه المدونة

C# - Arrays

Entity Framework - ما هو ORM؟ ونبذة عن Dapper وNHibernate

Entity Framework - مقدمة عن Entity Framework