Вы можете использовать библиотеку Automapper и отобразить модель на ViewModel, установив класс профиля сопоставления.
Сначала добавьте Automapper и Внедрение зависимостей Automapper пакеты.
Затем добавьте Automapper в класс запуска:
public class Startup
{
// Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
...
Mapper.Reset(); // Useful if you're using code-first and migrations.
services.AddAutomapper();
}
// Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app)
{
...
}
}
Создайте свою модель представления с только необходимыми свойствами для отправки во внешнее приложение.
public class CardViewModel
{
public object PropVM1 {get; set;}
public object PropVM2 {get; set;}
public object PropVM3 {get; set;}
...
}
Из класса Model:
public class Card
{
public object Prop1 {get; set;}
public object Prop2 {get; set;}
public object Prop3 {get; set;}
public object Prop4 {get; set;}
public object Prop5 {get; set;}
...
}
Затем создайте класс профиля отображения, который наследуется от AutoMapper.Profile:
public class AppMappingProfile : Profile
{
public AppMappingProfile()
{
CreateMap<Card, CardViewModel>()
.ForMember(d => d.PropVM1, ex => ex.MapFrom(o => o.Prop1))
.ForMember(d => d.PropVM2, ex => ex.MapFrom(o => o.Prop2))
.ForMember(d => d.PropVM3, ex => ex.MapFrom(o => o.Prop3))
.ReverseMap() // if a two-away Mapping is necessary
}
}
Наконец, добавьте Automapper в ваш контроллер:
public class CardController : Controller
{
private readonly IMapper;
public CardController(IMapper mapper)
{
_mapper = mapper;
}
[HttpGet]
[Route("api/v1/cards")]
public IActionResult Cards(inputParameters,selector,filtering)
{
var result = DoYourThing();
//if a list of cards
if(result != null && result.Count > 0) return Ok(_mapper.Map<List<Card>, List<CardViewModel>>(result));
return NoContent();
// if single card object
if(result != null) return Ok(_mapper.Map<Card, CardViewModel>())
return NoContent();
}
}
Надеюсь, вы найдете это полезным.