حتی اگر یک برنامه به درستی و با دقت فراوان نوشته شده باشد، بازهم ممکن است تا استثناهایی رخ دهند و از این رو می بایست که این استثناها به درستی اداره شوند. در ASP.NET Core یک سری از میان افزارها هستند که چگونگی اداره کردن استثناهای در روند درخواست (Request Pipeline) را کنترل می کنند. توجه کنید در این نوشته ها منظور ما از روند درخواست اشاره به واژه Request Pipeline است که در مستندات مایکروسافت و در بخش میان افزارها آمده است که درباره آن خواهیم گفت.

 به کارگیری ()UseDeveloperExceptionPage در محیط Development

در نوشته فایل Startup.cs در ASP.NET Core MVC گفتیم که در متد ()Configure بررسی می شود که آیا محیط Developement هست و اگر باشد متدی به نام ()UseDeveloperExceptionPage فراخوانی می شود که این متد برگه استثناهای زمان توسعه را در مرورگر نشان می دهد. بهتر است بگوییم در زمان دیباگ و اجرا کردن پروژه، اگر خطایی در برنامه شما و در هر یک از فایل های مدل، نما یا کنترل گر و دیگر فایل ها باشد، در مرورگر خطا و فایلی که خطا در آن هست، نشان داده می شود. قاعدتا برگه خطاهای نمایش داده شده در مرورگر به کمک تگ های اچ تی ام ال ساخته می شود.

توجه کنید برگه استثنا زمان توسعه (Development Exception Page) تنها زمانی فعال است که برنامه در محیط Development باشد. قاعدتا زمانی که برنامه آماده می شود و باید محیط برنامه Production باشد، پس نیازی نیست که این اطلاعات عمومی را با همگان به اشتراک بگذاریم. همچنین متد ()UseDeveloperExceptionPage باید پیش از هر میان افزار دیگری فراخوانی شود که این میان افزارها می خواهند استثاناها را Catch کنند.

به کارگیری ()UseStatusCodePages

در کد زیر و درون بدنه if، یکی دیگر از متدهای (میان افزاهای) اداره کردن استثناها به نام ()UseStatusCodePages را به کار برده ایم که پیام های توصیفی را به پاسخ ها می افزاید. توجه کنید وب بر پایه پروتکل HTTP (یا HTTPS) است که از درخواست ها و پاسخ ها تشکیل شده است. به طور پیش فرض پروژه ASP.NET Core هیچ صفحه ای برای کدهای HTTP مانند خطای پیدا نشدن صفحه با کد شماره ۴۰۴ را آماده و فراهم نمی کند بلکه تنها یک کد وضعیت (Statue Code) با صفحه ای خالی و بدون محتوا را برگشت می دهد.

در زیر دو شکل از چپ به راست خطای ۴۰۴ را نشان می دهند به ترتیب برای زمان هایی که متد ()UseStatusCodePages به کار نرفته و زمانی که متد ()UseStatusCodePages به فایل Startup.cs افزوده شده است. به عبارت دیگر زمانی که متد را استفاده نکرده ایم، پس خطای ۴۰۴ بدون یک محتوای نمایش خطا برگشت داده می شود (برگه سیاه رنگ خود مرورگر) ولی اگر متد را به کار برده باشیم، یک پیغام خطای ساده مبنی بر کد وضعیت (Statue Code) و پیغام خطا نشان داده می شود.

متد ()UseStatusCodePages در چهار شیوه Overload شده است که می توانید آنها را از اینجا ببینید. یکی از این Overload ها دوپارامتر ورودی از نوع رشته دریافت می کند که اولی گونه یا MIME Type را نشان می دهد که می تواند رشته ای به صورت text/plain باشد و دومین پارامتر، پیغام خروجی را مشخص می کند.

به کارگیری ()UseExceptionHandler در محیط Production

برای پیکربندی یک برگه دلخواه و سفارشی اداره کردن خطاها برای محیط Production باید از میان افزار به نام ()UseExceptionHandler کمک بگیریم که استثناها را Catch و لاگ می کند. این میان افزار، درخواست را در یک روند جایگزین از نو اجرا (Re-Execute) می کند. در کد بالا و درون بلاک else، نخست این میان افزار فراخوانی شده است. در زیر فهرست کارهایی که ()UseExceptionHandler انجام می دهد، فهرست شده اند.

  • بدست آورن استثناها (Catch Exceptions)
  • لاگ کردن آن استثنا
  • اجرای دوباره درخواست در یک روند درخواست جایگزین (Alternate Request Pipeline)

برابر با کد بالا، متد ()UseExceptionHandler یک رشته URL را در ورودی دریافت می کند که کاربر برای دریافت پیغام خطا به این نشانی هدایت (Redirect) می شود. این نشانی URL هر چیزی می تواند باشد ولی پیش فرض در ASP.NET Core MVC، نشانی Home/Error/ استفاده می شود.

در این نوشته نمی توان بیش از این درباره اداره کردن استثناها گفت و باید مفاهیم دیگر گفته شود تا شما بتوانید این متدهای میان افزارهای استثناها را به گونه بهتری درک کنید. تنها به یاد داشته باشید که متدهای استثنا میان افزارهایی هستند که به متد ()Configure کلاس Startup افزوده می شوند.