Autmapper中不同API的条件配置

时间:2019-01-30 07:12:52

标签: c# asp.net-web-api2 automapper

我在webapi项目中使用了自动映射器。我有一个说ProductImagesController的控制器,它具有以下操作。

  1. 获取所有产品:〜/ api / productImagess
  2. 通过ID获取产品:〜/ api / productImages / {id}
  3. 创建产品:〜/ api / productImages
  4. 更新产品:〜/ api / productImages / {id}

我具有ProductImage模型以及如下的ProductImageViewModel;

public class ProductImage:
{
    public int Id { get; set; }
    public string FileName { get; set; }
    public string Description { get; set; }
    public byte[] Content { get; set; }
    public double? Height { get; set; }
    public double? Width { get; set; }
    public string MimeType { get; set; }
    public DateTime Created { get; set; }
    public DateTime Updated { get; set; }
}

public class ProductImageViewModel:
{
    public int Id { get; set; }
    public string FileName { get; set; }
    public string Description { get; set; }
    public string Base64Content { get; set; }
    public double? Height { get; set; }
    public double? Width { get; set; }
    public string MimeType { get; set; }
    public DateTime Created { get; set; }
    public DateTime Updated { get; set; }
}

因此,我正在使用ViewModel在客户端之间进行传输,并使用自动映射器进行配置以映射这两个模型。请参见下面;

config.CreateMap<ProductImage, ProductImageViewModel>()
.ForMember(dest => dest.Base64EncodedContent, opt => opt.Ignore())
.ReverseMap()
.ForMember(dest => dest.Content, opt => opt.MapFrom(src => Convert.FromBase64String(src.Base64Content)))
.ForMember(dest => dest.Created, opt => opt.Ignore())
.ForMember(dest => dest.Updated, opt => opt.Ignore())
});

现在工作正常,这里的要点是由于长度和大小,我不想将base64编码的字符串发送给客户端。

新退休:

当前,我有一个要求仅发送通过ID(~/api/productImages/{id})API获得的编码字符串。

解决方案

在GetByID操作中,在将模型映射到视图模型之后,我可以通过使用productImageViewModel.Base64Content = Convert.ToBase64String(productImage.Content);将字节转换为base64来更新视图模型。

问题:

通过将此条件映射到自动映射器配置来实现相同目的的任何选项吗?这样可以避免在操作中进行显式设置。

0 个答案:

没有答案