The Data Transfer Object(DTO) is a container that transfers the API data between layers. Using this container, we can manipulate the data or change the structure of the data. Let's see how
Creating a Project
Relational DB - Getting Data including Data from Other Entities (Generic Repository Pattern)
Let's see how we can get data from a primary entity that has reference to other entities with the generic repository pattern Implementation Creating an Application How to create .NET web-API Setting up development tools When working with .NET, we need tool
jin-co.tistory.com
Using DTO
To better organize, create a folder to hold the DTO class
Add a DTO class in the folder
Add properties to manipulate
Go to the controller class. In the methods that fetche data, change the return type to DTO class we just created and map the original data to the DTO format then return
▶ For Individual Item
▶ For a List of Items
Run
Move to the API folder
cd /API
And run the app
dotnet watch
※ Using an Extension
Nuget Gallery provides an extension that does the same work easily. Search the extension below in the Nuget Gallery and install it to webapi project
AutoMapper.Extensions.Microsoft.DependencyInject
Add a class to add the mapping codes
Add a constructor with a method shown below
public Mapper()
{
CreateMap<Item, ItemDTO>();
}
Note that the extension uses the name and type of a property to automatically map the data. So if one of them is different you won't see the desired result. We can get around this with an additional settings
Append options that specifies what we want to use for a certain property to the mapping method
public Mapper()
{
CreateMap<Item, ItemDTO>()
.ForMember(d => d.ItemTarget, o => o.MapFrom(s => s.ItemTarget.Name))
.ForMember(d => d.ItemType, o => o.MapFrom(s => s.ItemType.Name));
}
Adding Service
Go to Program.cs file and add the code below to register the extension as a service
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
Updating the Controller Class
Go to the controller class and inject the 'IMapper' interface
Use the injected mapper and update each method as shown below
Manipulating Image Path
To automatically change the URL between the development and production environment. Go to 'appsettings.Development.json' and add the hostname
Inject the 'IConfiguration' interface to the controller
append the path we set up in the 'appsettings.Development.json' in front of the image URL
※ Manipulating Image Path with the Mapper Extension
To automatically change the URL between the development and production environment. Go to 'appsettings.Development.json' and add the hostname
Add a class to edit the image path
Inherit from 'IValueResolver' interface. The first value in the generic parameter is the original entity. The second and the third are the entity that we want to convert to and the type of the entity
Implement the interface and add a constructor
Add the code below in the implemented method.
'["URL"]' represents the URL we added in the 'appsettings.Development.json'
if (!string.IsNullOrEmpty(source.ImageURL))
{
return _config["URL"] + source.ImageURL;
}
return null;
Go to the mapper class, add the URL mapper option as below
.ForMember(d => d.ItemType, o => o.MapFrom<URLMapper>());
In this writing, we got to know what is DTO and how to use it.
'Backend > .NET' 카테고리의 다른 글
Swagger (0) | 2023.04.19 |
---|---|
Using Static Files (0) | 2023.04.19 |
Relational DB - Getting Data Asynchronous (0) | 2023.04.16 |
Relational DB - Getting Data including Data from Other Entities (Generic Repository Pattern) (0) | 2023.04.15 |
Relational DB - Getting Data including Data from Other Entities (Repository Pattern) (0) | 2023.04.12 |