نحوه ی نادیده گرفتن مقادیر Null در AutoMapper در ASP.NET Core

ساخت وبلاگ

Null

در این مقاله، خواهید آموخت که چگونه مقادیر Null را درون AutoMapper در ASP.NET Core نادیده بگیرید و نحوه ی حذف ویژگی های null را از بدنه ی پاسخ خواهیم آموخت.

نیازمندی ها

• Visual Studio 2017 یا ۲۰۱۹
• AutoMapper Nuget Package
• AutoMapper Dependency Injection Package

برای این مثال از VS2019 استفاده کرده ایم.

بیایید شروع کنیم!

Visual Studio را باز کرده، به منوی File -> New -> Project بروید.

یک قالب پروژه ی جدید را نمایش خواهد داد که در آنجا باید ASP.NET Core Web Application را انتخاب کرده و “ Next ” را کلیک کنید.

ASP.NET Core Web Application

به محض کلیک بر روی دکمه ی “ Next ”، از شما می خواهد که قالب را بصورت زیر پیکربندی کنید.

Null

یک Project Name انتخاب کنید، هرچه که به نظرتان با معنا باشد.

در اینجا، AutoMapperExample را انتخاب کرده ایم.

بر روی دکمه ی “ Create ” کلیک کنید.

پس از آن، صفحه ی زیر را نشان خواهد داد که در آنجا باید قالب API را انتخاب کرده و بر روی دکمه ی “ Create ” کلیک کنیم.

Null

ساختار پروژه بصورت زیر در Solution Explorer ظاهر خواهد شد.

AutoMapperExample

ابتدا، پکیج های NuGet مربوط به AutoMapper را نصب کنید.

برای این کار، بر روی پروژه راست کلیک کرده و گزینه ی “ Manage NuGet Packages ” را انتخاب کنید.

کادر محاوره ای package manager باز خواهد شد که در آن باید نام پکیج NuGet خاصی را جهت نصب وارد کنید.

برای این پیش نمایش، به دو AutoMapper NuGet Package نیاز داریم:

AutoMapper

AutoMapper

آن را جستجو کرده و دکمه ی “ Install ” را در سمت راست کادر محاوره ای کلیک کنید.

  • AutoMapper.Extensions.Microsoft.DependencyInjection

دومین پکیج AutoMapper.Extensions.Microsoft.DependencyInjection می باشد.

Null

بر روی “ Install ” کلیک کرده و تنها با بررسی درون Dependencies تحت Solution Explorer بصورت زیر، از نصب بودن تمامی پکیج های مورد نیاز اطمینان حاصل کنید.

Solution Explorer

سپس، به پوشه ی Controllers رفته و EmployeeController را ایجاد کنید.

برای این کار، بر روی پوشه ی Controllers راست کلیک کرده و Add -> Controller را انتخاب کنید.

کادری به شکل زیر نشان داده خواهد شد.

Null

انتخاب API Controller

از شما خواسته می شود که نام کنترل کننده را وارد کنید؛ در اینجا، نام کنترل کننده را Employee گذاشتیم.

API Controller

قطعه کد زیر را درون کنترل کننده کپی کنید.

using System.Collections.Generic;
using AutoMapper;
using AutoMapperExample.Data;
using Microsoft.AspNetCore.Mvc;
namespace AutoMapperExample.Controllers { [Route("api/[controller]")] [ApiController] public class EmployeeController: ControllerBase { private readonly IMapper _mapper; public EmployeeController(IMapper mapper) { _mapper = mapper; } public IEnumerable < EmployeeDto > PostEmployee(IEnumerable < EmployeeDto > employeeDtos) { Employee employee = new Employee(); // mapping EmployeeDto to Employee var employees = _mapper.Map < IEnumerable < EmployeeDto > , IEnumerable < Employee >> (employeeDtos); var empList = employee.GetEmployees(employees); var list = _mapper.Map < IEnumerable < Employee > , IEnumerable < EmployeeDto >> (empList); return list; } }
} 

درون کنترل کننده، فایل EmployeeDto.cs را با کد زیر اضافه کردیم.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace AutoMapperExample.Controllers { public class EmployeeDto { public int Id { get; set; } public string Name { get; set; } public string Gender { get; set; } public string Mobile { get; set; } public string Address { get; set; } public string Designation { get; set; } }
} 

حال، یک پوشه ی Data تحت Solution Explorer اضافه کرده و فایل Employee.cs درون آن را نگه دارید.

using AutoMapperExample.Controllers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace AutoMapperExample.Data { public class Employee { public int Id { get; set; } public string Name { get; set; } public string Gender { get; set; } public string Mobile { get; set; } public string Address { get; set; } public string Designation { get; set; } public IEnumerable < Employee > GetEmployees(IEnumerable < Employee > employees) { return employees; } }
} 

دو فایل بالا بصورت زیر در Solution Explorer ظاهر خواهند شد.

Solution Explorer

اگر EmployeeController را مشاهده کنید، خواهید دید که من IMapper را در سطح سازنده تزریق کرده ام و به همراه آن، متد PostEmployee وجود دارد که وظیفه ی گرفتن داده ها از کاربر و نگاشت آن به لایه ی داده ها را بر عهده دارد.

در مورد ما، فایل Employee.cs تحت پوشه ی Data می باشد.

برای اهداف یادگیری، به هیچ پایگاه داده ای متصل نشده ام و تنها هر چیزی که کاربر ارسال می کند را برمی گردانم.

کاری که در اینجا انجام می دهیم این است که تنها آن را از Dto به Data و بالعکس نگاشت می کنیم.

داده های ارسالی کاربر را با کمک فایل EmployeeDto.cs دریافت و آن را به فایل Employee.cs نگاشت می کنیم.

به منظور نگاشت داده ها بین این فایل ها، نیاز است MappingProfile.cs را به پروژه ی خود افزوده و قطعه کد زیر را در آن نگه داریم.

using AutoMapper;
using AutoMapperExample.Controllers;
using AutoMapperExample.Data;
namespace AutoMapperExample { public class MappingProfile: Profile { public MappingProfile() { CreateMap < EmployeeDto, Employee > (); CreateMap < Employee, EmployeeDto > (); } }
} 

پس از آن، باید این فایل را در متد ConfigureServices() تحت فایل Startup.cs بصورت زیر پیکربندی کنیم.

public void ConfigureServices(IServiceCollection services) { // Auto Mapper Configurations var mappingConfig = new MapperConfiguration(mc => { mc.AddProfile(new MappingProfile()); }); IMapper mapper = mappingConfig.CreateMapper(); services.AddSingleton(mapper); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
} 

اکنون، برنامه را اجرا کرده و سعی کنید داده ها را درون کنترل کننده ی Employee و متد PostEmployee بفرستید.

به منظور ارسال داده ها، از Postman استفاده می کنیم.

Null

می توانیم مشاهده کنیم هر چیزی که به کنترل کننده ارسال می کنیم، طبق انتظار باز می گردد.

تا به اینجا، وضعیت خوب است.

حال بیایید مشکل واقعی را ببینیم. اگر ویژگی null را به این مدل ارسال کنیم چه؟

بگذارید ویژگی mobile را null کرده و پاسخ را مشاهده کنیم.

 ASP.Net Core

اگر در اینجا بررسی کنید، ویژگی null در پاسخ برمی گردد.

بنابراین، راه حل اجتناب از ویژگی های null در پاسخ این است که قطعه کدی درون متد ConfigureServices از فایل Startup.cs بصورت زیر اضافه کنیم.

.AddJsonOptions(options => options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore); 

اکنون، متد کامل ConfigureServices شما به شکل زیر می باشد.

public void ConfigureServices(IServiceCollection services) { // Auto Mapper Configurations var mappingConfig = new MapperConfiguration(mc => { mc.AddProfile(new MappingProfile()); }); IMapper mapper = mappingConfig.CreateMapper(); services.AddSingleton(mapper); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddJsonOptions(options => options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore);
} 

حال، بسته ی داده ای مشابهی را از طریق Postman ارسال کرده و نتیجه را ببینید.

این بار، ویژگی null در پاسخ نخواهید دید. در مورد ما، ویژگی mobile این بار ظاهر نخواهد شد.

Null

گرچه مقدار null را از بدنه ی درخواست ارسال می کنیم، اما در نتیجه ی پاسخ ظاهر نخواهد شد.

به این صورت می توانیم از ویژگی های null از پاسخ با کمک Jsonserializersettings اجتناب کنیم.

امیدوارم خوشتان بیاید. به کدنویسی ادامه دهید…….

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

برچسب : نویسنده : دانلودی source بازدید : 271 تاريخ : يکشنبه 1 دی 1398 ساعت: 17:19