.NET Core - التعامل مع الأخطاء (Exception Handling)

6.3 .NET Core - التعامل مع الأخطاء (Exception Handling)

أي تطبيق معرض للأخطاء أثناء التشغيل مثل: أخطاء في قاعدة البيانات، أو Null Reference، أو مدخلات غير صحيحة. في ASP.NET Core، يمكنك التعامل مع هذه الأخطاء بطريقة مركزية وآمنة باستخدام Middleware مخصص أو الأدوات المدمجة.


🔹 الطرق الشائعة للتعامل مع الأخطاء

  • استخدام try-catch داخل الأكشن.
  • استخدام Middleware مخصص للتعامل مع الأخطاء عالميًا.
  • استخدام ExceptionHandler Middleware الرسمي من ASP.NET Core.

🔹 الطريقة البسيطة: try-catch


[HttpGet("{id}")]
public IActionResult Get(int id)
{
    try
    {
        var product = GetProductById(id);
        return Ok(product);
    }
    catch (Exception ex)
    {
        return StatusCode(500, $"خطأ: {ex.Message}");
    }
}

🔸 جيدة للسيناريوهات البسيطة، لكنها مملة ومكررة في المشاريع الكبيرة.

🔹 الطريقة الاحترافية: Middleware للتعامل مع الأخطاء

📄 إنشاء Middleware مخصص:


public class ErrorHandlerMiddleware
{
    private readonly RequestDelegate _next;

    public ErrorHandlerMiddleware(RequestDelegate next) => _next = next;

    public async Task InvokeAsync(HttpContext context)
    {
        try
        {
            await _next(context);
        }
        catch (Exception ex)
        {
            context.Response.StatusCode = 500;
            context.Response.ContentType = "application/json";

            var result = new
            {
                Message = "حدث خطأ غير متوقع.",
                Error = ex.Message
            };

            await context.Response.WriteAsJsonAsync(result);
        }
    }
}

🧩 التسجيل في Program.cs:


app.UseMiddleware<ErrorHandlerMiddleware>();

🔹 الطريقة الرسمية: UseExceptionHandler

يمكنك استخدام الـ Middleware المدمج في ASP.NET Core:


app.UseExceptionHandler(errorApp =>
{
    errorApp.Run(async context =>
    {
        context.Response.StatusCode = 500;
        context.Response.ContentType = "application/json";

        var error = context.Features.Get<IExceptionHandlerPathFeature>();
        if (error != null)
        {
            await context.Response.WriteAsJsonAsync(new
            {
                Message = "خطأ داخلي في الخادم.",
                Error = error.Error.Message
            });
        }
    });
});

🔹 نصائح إضافية

  • لا تعرض رسائل الخطأ التفصيلية في بيئة الإنتاج.
  • سجّل الأخطاء في ملف أو قاعدة بيانات باستخدام Logger.
  • استخدم StatusCodes مناسبة (400 - 404 - 500).

🔹 الخلاصة

التعامل مع الأخطاء بشكل مركزي باستخدام Middleware يجعل الكود أنظف وأكثر احترافية. ويساعد على حماية التطبيق من الأعطال غير المتوقعة، مع تقديم رسائل مناسبة للمستخدم.

تعليقات