بررسی قابلیت مدیریت استثناها Exception Handling در ASP.NET Core

بررسی قابلیت مدیریت استثناها Exception Handling در ASP.NET Core

در این پست از وبسایت پرووید، در رابطه با بررسی قابلیت مدیریت استثناها Exception Handling در ASP.NET Core صحبت خواهیم کرد. به ادامه ی مطلب بروید.

در این قسمت از این سری آموزشی از وب سایت پرووید در رابطه با قابلیتهای مربوط به مکانیزم Exception Handling و یا همان مدیریت استثنا در فریم ورک ASP.NET Core صحبت خواهیم کرد. خوشبختانه فریم ورک ASP.NET Core دارای یک Middleware می باشد که براحتی می توان توسط آن فرایند Exception Handling را انجام داد. بطور پیش فرض فریم ورک ASP.NET Core یک کد حالت و یا Status Code ساده را برای هر Exception ای که در برنامه رخ می دهد Return می کند. نگاهی به کد زیر بیندازید که مربوط به متد Configure می باشد و درون آن یک Exception اصطلاحاً Throw شده است.

public class Startup
{
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {            
        app.Run(context => { throw new Exception("error"); });
    }
}

خروجی این کد در مرورگر شبیه به تصویر زیر خواهد بود.

نصب پکیج Microsoft.AspNetCore.Diagnostics

به منظور هندل کردن Exception ها و نشان دادن پیامهای کاربر پسند و یا اصطلاحاً User Friendly Message نیاز به نصب کردن یک NuGet Package با نام Microsoft.AspNetCore.Diagnostics داریم. توصیه می کنیم حتماً آموزش رایگان NuGet Package ها از وب سایت پرووید را ببینید. پس از نصب این NuGet Package باید Middleware مورد نظر را در متد Configure تنظیم کنیم. نکته ی دیگر اینکه اگر از Template مربوط به ساخت یک اپلیکیشن با ASP.NET Core در ویژوال استودیو استفاده می کنید ممکن است که پکیج Microsoft.AspNetCore.Diagnostics از پیش نصب شده باشد. اگر این اتفاق نیفتاده است براحتی می توانید توسط NuGet Package Manager اقدام به نصب کردن این پکیج کنید.

بسته ی آموزش ویدئویی ساخت اولین وب اپلیکیشن با ASP.NET Core MVC

از شما دعوت می کنیم که از بسته ی آموزش ویدئویی ساخت اولین وب اپلیکیشن با ASP.NET Core MVC دیدن کنید.

در پکیج Microsoft.AspNetCore.Diagnostics تعدادی Extension Method تعریف شده است که با استفاده از آنها می توانیم در سناریوهای مختلف Exception ها را Handle کنیم. دو مورد از این Extension Method ها در قسمت زیر قرار داده شده اند.

بررسی متد UseDeveloperExceptionPage

با استفاده از این Extension Method براحتی می توان Middleware مورد نظر را در Request Pipeline مربوط به ASP.NET Core قرار داد. متد UseDeveloperExceptionPage باعث می شود که در زمان رخ دادن یک Exception جزئیات مربوط به آن به برنامه نویس نشان داده شود تا وی بتواند براحتی در سدد رفع کردن آن Exception برآید.

بسته ی آموزش ویدئویی ساخت وب اپلیکیشن Full-stack با Angular و ASP.NET Core و EF Core

از شما دعوت می کنیم که از بسته ی آموزش ویدئویی ساخت وب اپلیکیشن Full-stack با Angular و ASP.NET Core و EF Core دیدن کنید.

دقت کنید که از این Extension Method فقط در فاز Development از برنامه استفاده خواهیم کرد. دلیل اینکه می گوئیم استفاده کردن از این Extension Method فقط در فاز Development توصیه می شود این است که این Extension Method جزئیات حساسی در رابطه با Exception رخ داده شده را نشان می دهد که طبیعتاً نباید کاربر نهایی به آنها دسترسی داشته باشد. در رابطه با Extension Method ها  در آموزش کامل توسعه نرم افزار با سی شارپ صحبت کرده ایم. نحوۀ استفاده کردن از این Extension Method در کد زیر نشان داده شده است.

public class Startup
{
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment() || env.IsStaging())
        {
            app.UseDeveloperExceptionPage();
        }

        app.Run(context => { throw new Exception("error"); });
    }
}

خروجی این کد شبیه به تصویر زیر خواهد بود.

همانطور که در تصویر بالا مشاهده می کنید Developer Exception Page شامل چهار تب می باشد که Stack و Query و Cookies و Headers نام دارند.

تب Stack حاوی اطلاعاتی در رابطه با Stack Trace است که با استفاده از آن می توانیم دقیقاً تشخیص بدهیم که یک Exception در کجای برنامه رخ داده است.

تب Query اطلاعاتی در رابطه با Query String در اختیار ما قرار می دهد و تب Cookies اطلاعاتی را در رابطه با Cookie هایی که توسط Request تنظیم شده اند در اختیار ما قرار می دهد. نهایتاً تب Headers حاوی اطلاعاتی در رابطه با Header ها می باشد.

بررسی متد UseExceptionHandler

در ساخت برنامه ها با فریم ورک ASP.NET Core MVC ممکن است بخواهیم که یک Controller خاص وظیفه Handle کردن تمامی Exception ها و نشان دادن Error Message های کاربر پسند را به عهده بگیرد. با استفاده از متد UseExceptionHandler براحتی می توانیم Route های خاصی را برای Handle کردن Error ها تنظیم کنیم. این موضوع زمانی استفاده می شود که برنامه در فاز Production قرار دارد. اگر منظور از فاز Production را درک نمی کنید حتماً قسمت قبلی از این آموزش که در رابطه با Environment Variable بود را مطالعه بفرمایید. لطفاً نگاهی به کد زیر بیندازید.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{

    if (env.IsDevelopment() || env.IsStaging())
    {
        app.UseDeveloperExceptionPage();
    }
    else 
    {
        app.UseExceptionHandler("/Home/Error");
    }

    //code removed for clarity 
}

همانطور که در کد بالا مشاهده می کنید با استفاده از متد UseExceptionHandler(“/Home/Error”) یک مسیر را برای Handle کردن Error ها تعریف کرده ایم. این به این معناست که اگر در درون برنامه یک Exception رخ بدهد آن Request به /Home/Error اصطلاحاً Redirect می شود و کد مربوط به متد Error که در درون HomeController قرار گرفته است اجرا می شود. در ادامه متد Error در HomeController را شبیه به کد زیر ایجاد می کنیم.

public class HomeController : Controller
{
    public HomeController()
    {
    }

    public IActionResult Error()
    {
        return View();
    } 

    // other code removed for the clarity

}

همچنین محتویات فایل View که Error.cshtml نام دارد در قسمت زیر نشان داده شده است.

@{
    ViewData["Title"] = "Error";
}

<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>

<h3>Development Mode</h3>
<p>
    Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
    <strong>Development environment should not be enabled in deployed applications</strong>, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>, and restarting the application.
</p>

با انجام این کار اگر در برنامه خطایی رخ بدهد این Veiw شبیه به تصویر زیر در مرورگر به کاربر نشان داده می شود.

نحوۀ تنظیم کردن Middleware مربوط به Handle کردن Exception ها در برنامه های ASP.NET Core به این ترتیب بود.

امیدواریم که این آموزش از وبسایت پرووید نیز مورد توجه تمامی دوستان عزیز قرار گرفته باشد. از شما دعوت می‌کنیم که از دیگر آموزش های ما در رابطه با فریم ورک ASP.NET Core استفاده کنید. لیست کامل این آموزش ها را می توانید در پست مربوط به آموزش کامل توسعه وب اپلیکیشن با ASP.NET Core مشاهده کنید.

مرتضی گیتی
بدون نظر

ارسال نظر

نظر
نام
ایمیل
وب سایت