نحوه مدیریت مقادیر null در ASP.NET

پنجشنبه 28 شهریور 1398

مدیریت مقادیر null در ASP.NET کار نسبتا راحتی است، در این مطلب قصد داریم درباره مدیریت مقادیر null در ASP.NET اطلاعات جامعی را در اختیار شما قرار دهیم.

 نحوه مدیریت مقادیر null در ASP.NET

قبل از صحبت درباره مدیریت مقادیر null در ASP.NET بهتر است توضیحاتی در خصوص این هسته به شما ارائه دهیم. هسته ام وی سی ASP.Net یک هسته .Net است که دقیقا همتای فریم ورک ام وی سی ASP.NET می باشد، با استفاده از الگوی طراحی Model-View-Controller می توانید اپلیکیشن های تحت وب کراس پلتفرم، مقیاس پذیر و با عملکرد بالا را طراحی کنید.

ما همواره می خواهیم که خطاها را در برنامه خود با ظریف ترین شکل ممکن مدیریت کنیم، زمانی که نوبت به مدیریت مقادیر null می رسد یعنی مواردی که در آن ها درخواست ها و پاسخ های خالی و یا بازگرداندن مقادیر null وجود دارد، فریم ورک ASP.NET Core MVC یک وضعیت HTTP با کد 204 را باز می گرداند که این کد خطای no content را نمایش می دهد. در این مقاله ما می خواهیم بررسی کنیم که چگونه می توانیم رفتار این مقدار پیش فرض را زمانی که متدهای action مقادیر null باز می گردانند تغییر دهیم و در واقع به نوعی اقدام به مدیریت مقادیر null در ASP.NET کنیم.

 مدیریت مقادیر null


یک پیشنیاز مهم برای کار کردن با مدیریت مقادیر null در این مقاله

برای کار کردن با کدهایی که ما در این مطلب به عنوان نمونه درباره کار کردن با مدیریت مقادیر null به شما نمایش می دهیم شما باید ویژوال استودیو نسخه 2019 را بر روی سیستم خود نصب کنید، بنابراین اگر هنوز آن را نصب نکرده اید با استفاده از آموزش های موجود در اینترنت اقدام به نصب آن کنید و بعد وارد این آموزش شوید.

 مدیریت مقادیر null


ساخت یک پروژه ASP.NET در ویژوال استودیو

در ابتدا برای صحبت درباره مدیریت مقادیر null ما باید اقدام به ساخت یک پروژه ASP.NET کنیم که این کار را در نسخه 2019 ویژوال استودیو انجام می دهیم. ما فرض می کنیم که نسخه 2019 ویژوال استودیو بر روی سیستم شما نصب است، بنابراین گام های زیر را دنبال کنید تا بتوانید یک پروژه ASP.NET بسازید.

1-      ویژوال استودیو نسخه 2019 را باز کنید.

2-      بر روی گزینه Create new project کلیک کنید.

3-      در پنجره Create new project که برای شما باز شده است از روی لیستی که در مقابل شما قرار دارد گزینه ASP.Net Core Web Application را انتخاب کنید.

4-      بر روی گزینه Next کلیک کنید.

5-      در پنجره Configure your new project که برای شما باز شده است نام و لوکیشن پروژه خود را تعیین کنید.

6-      بر روی گزینه Create کلیک کنید.

7-      در پنجره Create a New ASP.Net Core Web Application که برای شما باز شده است Net Core را بر روی ران تایم و ASP.Net Core 2.2 یا نسخه های بعدی قرار دهید.

8-      Web Application (Model-View-Controller) را به عنوان قالب پروژه خود انتخاب کنید و بر روی گزینه create a new ASP.Net Core application کلیک کنید.

9-      مطمئن شوید که چک باکس های Enable Docker Support و Configure for HTTPS انتخاب نشده باشند چرا که ما از آن ها استفاده نخواهیم کرد.

10-  مطمئن شوید که گزینه Authentication بر روی No Authentication تنظیم شده باشد.

11-  بر روی گزینه Create کلیک کنید.

با دنبال کردن این گام ها شما باید بتوانید یک پروژه ASP.NET را برای مدیریت مقادیر null در ASP.NET بسازید، ما از این پروژه در بخش های بعدی این مطلب استفاده می کنیم تا به شما نحوه مدیریت مقادیر null را نشان دهیم.

 مدیریت مقادیر null


ساخت یک کنترلر برای مدیریت مقادیر Null در ASP.NET

در پنجره Solution Explorer فولدر مربوط به کنترلرها را در پروژه انتخاب کنید، بر روی آن راست کلیک کنید و گزینه Add->Controller انتخاب کنید تا بتوانید یک کنترلر جدید بسازید. نام کلاس این کنترلر را بر روی DemoController تنظیم کنید. حال کد کلاس مربوط به DemoController را با قطعه کد زیر عوض کنید:

[Route("api/[controller]")]

    [ApiController]

    public class DemoController : ControllerBase

    {

        readonly Repository repository = new Repository();

        [HttpGet]

        public ActionResult Get()

        {

            string item = repository.GetMessage();

            return Ok(item);

        }

        [HttpGet("{id}", Name = "Get")]

        public IActionResult Get(int id)

        {

            string item = repository.GetMessage();

            return Ok(item);

        }

    }


 مدیریت مقادیر null


یک کلاس ساده Repository در ASP.NET بسازید

در این جا یک نسخه ساختگی از کلاس Repository وجود دارد که تنها شامل یک متد است که این متد نیز مقدار Null بر می گرداند. البته توجه داشته باشید که این تنها برای اهداف آموزشی در این جا قرار داده شده است.

public class Repository

    {

        public string GetMessage()

        {

            return null;

        }

    }

ASP.Net Core MVC چگونه مدیریت مقادیر null را انجام می دهد؟

زمانی که شما HttpGet که نقطه انتهایی DemoController که در بخش بالا معرفی شده است را فراخوانی می کنید رفتار out-of-box از ASP.Net Core MVC با کد 2014 حالت HTTP تعامل می کند. شما این کد را می توانید در تصویر زیر مشاهده کنید:

 مدیریت مقادیر null

اما چرا این طور است؟ فریم ورک ASP.NET در زمان پاسخ دادن سعی می کند که یک فرمت کننده خروجی را از میان فرمت کننده های مختلف انتخاب کند تا بتواند عملیات مدیریت مقادیر null را به خوبی انجام دهد. معمولا این فرمت کننده می تواند یک فرمت کننده جیسون، XML و یا هر فرمت کننده دیگری باشد.

با این حال در زمان مدیریت مقادیر null این فریم ورک از یک فرمت کننده دیگر استفاده می کند. این فرمت کننده HttpNoContentOutputFormatte نامیده می شود که می تواند پاسخ های Null را به کد وضعیت HTTP 2014 و یا پاسخ No Content تبدیل کند.


غیر فعال کردن HttpNoContentOutputFormatter در ASP.NET

شما می توانید مدیریت کننده مقادیر null پیش فرض را در ASP.NET غیر فعال کنید که این کار با غیر فعال کردن HttpNoContentOutputFormatter انجام می شود.

برای انجام این کار قطعه کد زیر را در متد ConfigureServices در داخل کلاس Startup بنویسید.

services.AddMvc(f =>

  {

      f.OutputFormatters.RemoveType

      (typeof(HttpNoContentOutputFormatter));

      f.OutputFormatters.Insert(0, new

      HttpNoContentOutputFormatter

      {

          TreatNullValueAsNoContent = false

      });

});

این قطعه کد می تواند رفتار HTTP Status Code 204 را غیر فعال کند. اکنون پاسخ دریافتی دارای کد وضعیت 200 خواهد بود که به معنای OK است و البته دارای یک مقدار null می باشد.

 مدیریت مقادیر null


بازگرداندن کد وضعیت 404 در ASP.NET

اجازه دهید متدهای اکشن کنترلر را به روز رسانی کنیم تا کد وضعیت HTTP 404 را باز گرداند. در این جا نسخه به روز رسانی شده از DemoController را برای منبع شما آورده ایم:

[Route("api/[controller]")]

    [ApiController]

    public class DemoController : ControllerBase

    {

        readonly Repository repository = new Repository();

        [HttpGet]

        public ActionResult Get()

        {

            string item = repository.GetMessage();

            if (item == null)

                return NotFound();

            return Ok(item);

        }     

    }

حالا زمانی که شما متد اکشن را اجرا می کنید کد وضعیت HTTP 404 که به معنای Not Found است مانند شکل زیر برگشت داده می شود.

 مدیریت مقادیر null


یک راه بهتر برای بازگرداندن کد وضعیت HTTP 404  در ASP.NET

یک گزینه بهتر برای بازگرداندن کد وضعیت HTTP 404 این است که از فیلترهای اکشن و یا فیلترهای result استفاده کنیم:

public class NotFoundActionFilterAttribute : ActionFilterAttribute

    {

        public override void OnActionExecuted(ActionExecutedContext context)

        {

            if (context.Result is ObjectResult)

            {

                ObjectResult objectResult = context.Result

                as ObjectResult;

                if (objectResult.Value == null)

                    context.Result = new NotFoundResult();

            }

        }

    }

حال شما می توانید فیلتر را در سطح اکشن، کنترلر و یا در سطح گلوبال پیاده سازی کنید، برای این که فیلتر را به صورت گلوبال پیاده سازی کنید قطعه کد زیر را در متد ConfigureServices در کلاس Startup بنویسید.

public void ConfigureServices(IServiceCollection services)

{

    services.AddMvc(f =>

    {

        f.Filters.Add(new NotFoundResultFilterAttribute());

    });

}

زمانی که با ASP.Net Core MVC کار می کنید شما می توانید داده ها را با استفاده از IActionResult یا ActionResult<T> یا هر شیء دیگری باز گردانید. این فریم ورک نیازمند این است که داده ها را بعد از بازگشت از متد اکشن سریالایز کند.

ایمان مدائنی

نویسنده 1299 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید