我在webapi项目中使用了自动映射器。我有一个说ProductImagesController
的控制器,它具有以下操作。
我具有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来更新视图模型。
问题:
通过将此条件映射到自动映射器配置来实现相同目的的任何选项吗?这样可以避免在操作中进行显式设置。