.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 يجعل الكود أنظف وأكثر احترافية. ويساعد على حماية التطبيق من الأعطال غير المتوقعة، مع تقديم رسائل مناسبة للمستخدم.
تعليقات
إرسال تعليق