使用automapper从HttpPostedFileBase映射到Byte []

Tob*_*asW 3 c# automapper asp.net-mvc-5

我试图上传图片并使用automapper将其从HttpPostedFileBase转换为Byte [].这是我的CreateMap:

            Mapper.CreateMap<HttpPostedFileBase, Byte[]>()
            .ForMember(d => d, opt => opt.MapFrom(s => 
                {
                    MemoryStream target = new MemoryStream();
                    s.InputStream.CopyTo(target);
                    return target.ToArray();
                }));
Run Code Online (Sandbox Code Playgroud)

我在s上得到一个错误:带有语句体的lambda表达式无法转换为表达式树.

那么我应该如何编写我的CreateMap才能使其工作?

And*_*ker 6

至少有两种方法可以做到这一点:

  1. 使用自定义类型转换器:

    public class HttpPostedFileBaseTypeConverter : 
        ITypeConverter<HttpPostedFileBase, byte[]>
    {
        public byte[] Convert(ResolutionContext ctx)
        {
            var fileBase = (HttpPostedFileBase)ctx.SourceValue;
    
            MemoryStream target = new MemoryStream();
            fileBase.InputStream.CopyTo(target);
            return target.ToArray();        
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    用法:

    Mapper.CreateMap<HttpPostedFileBase, byte[]>()
        .ConvertUsing<HttpPostedFileBaseTypeConverter>();
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用ConstructUsing并内联:

    Mapper.CreateMap<HttpPostedFileBase, byte[]>()
        .ConstructUsing(fb =>
    {
        MemoryStream target = new MemoryStream();
        fb.InputStream.CopyTo(target);
        return target.ToArray();
    });
    
    Run Code Online (Sandbox Code Playgroud)