CodeShot
Midسختی 3 از ۵· در 58٪ مصاحبه‌های این حوزه پرسیده شده

مدیریت متمرکز خطا در ASP.NET Core را چطور پیاده می‌کنید؟

نشان کردن

پاسخ کوتاه

با یک Middleware در ابتدای Pipeline که کل زنجیره را در try/catch می‌گیرد و خطا را به یک پاسخ استاندارد (ProblemDetails) تبدیل می‌کند.

پاسخ کامل

چون Middlewareها تودرتو اجرا می‌شوند، هر Middleware که زودتر ثبت شود، خطاهای همه Middlewareهای بعدی را هم می‌بیند. بنابراین Middleware مدیریت خطا باید اولین مورد در Pipeline باشد.

کارهایی که باید انجام دهد:

  • نگاشت نوع خطا به کد وضعیت مناسب (NotFound → 404، Validation → 400، بقیه → 500)
  • لاگ‌کردن با CorrelationId برای پیگیری
  • نشت‌ندادن جزئیات داخلی (Stack Trace) به کلاینت در محیط Production

مثال کد

public async Task InvokeAsync(HttpContext context)
{
    try
    {
        await _next(context);
    }
    catch (NotFoundException ex)
    {
        context.Response.StatusCode = StatusCodes.Status404NotFound;
        await context.Response.WriteAsJsonAsync(new ProblemDetails { Title = ex.Message });
    }
}

نکته مهم

اگر پاسخ از قبل شروع به ارسال شده باشد (context.Response.HasStarted)، دیگر نمی‌توانید کد وضعیت را عوض کنید؛ این حالت را حتماً بررسی کنید.

اشتباه رایج

❌ برگرداندن ex.ToString() به کلاینت — یک نشت اطلاعاتی جدی است که ساختار داخلی برنامه را لو می‌دهد.