c# - WebAPI Controller 中的自动映射器

标签 c# .net asp.net-web-api automapper

我有一个 Car WebAPI Controller 方法,如下所示 - 注意 _carService.GetCarData 返回 CarDataDTO 对象的集合

[HttpGet]
[Route("api/Car/Retrieve/{carManufacturerID}/{year}")]
public IEnumerable<CarData> RetrieveTest(int carManufacturerID, int year)
{
    //Mapper.Map<>
    var cars = _carService.GetCarData(carManufacturerID, year);
    //var returnData = Mapper.Map<CarData, CarDataDTO>();
    return cars;
}

CarData 是我创建的 WebAPI 模型。

public class CarData
{
    public string Model { get; set; }
    public string Colour { get; set; }
    //other properties removed from brevity
}

CarDataDTO 是我创建的一个模拟数据库表的类 - 我通过使用 dapper 调用的存储过程检索数据。

public class CarDataDTO
{
    public int CarID { get; set; }
    public int CarManufacturerID { get; set; }
    public int Year { get; set; }
    public string Model { get; set; }
    public string Colour { get; set; }
    //other properties removed from brevity
}

如果我在我的 API Controller 中的 var cars 行上有一个断点,我可以看到按预期返回的所有内容,并且我有一个 CarDTO 对象集合。但是,我不要求 WebAPI 返回 CarDataID、CarID 或年份,这就是我创建 CarData API 模型的原因。

我怎样才能轻松地使用 Automapper 只映射我关心的属性?

我需要在我的 WebApiConfig 类中设置一些东西吗?

最佳答案

您可以从以下位置安装 AutoMapper nuget 包:AutoMapper 然后声明一个类:

public class AutoMapperConfig
{
    public static void Initialize()
    {
        Mapper.Initialize((config) =>
        {
            config.CreateMap<Source, Destination>().ReverseMap();
        });
    }
}

然后在您的 Global.asax 中这样调用它:

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AutoMapperConfig.Initialize();
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}

如果你想忽略某些属性,那么你可以这样做:

Mapper.CreateMap<Source, Destination>()
  .ForMember(dest => dest.SomePropToIgnore, opt => opt.Ignore())

您使用它进行映射的方式是:

DestinationType obj = Mapper.Map<SourceType, DestinationType>(sourceValueObject);
List<DestinationType> listObj = Mapper.Map<List<SourceType>, List<DestinationType>>(enumarableSourceValueObject);

关于c# - WebAPI Controller 中的自动映射器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42812430/

相关文章:

c# - 如何修复 Mono 3.0.3、Entity Framework 6 Beta2 和 Npgsql 上 MVC3 项目的 DbProviderServices 继承错误?

.net - 使用SqlCommand +参数将数据库值设置为null

c# - 离开 ApiController 方法后 WEB API 挂起

javascript - ExtJS GET 操作在 FireFox 中存储返回 500

c# - 脚本在 UWP 的 WebView 中不起作用

c# - 理论上是否可以操纵 .NET 程序集以使所有内容都公开?

c# - 如何获取要在DbContext c#中创建的下一个实体的主键(id)

javascript 不能正确地将 angular ui datepicker 日期转换为 UTC

c# - 我怎样才能给一组控件一个工具提示,并让它顺利显示?

c# - 如何在 C# 中监控文件访问