c# - 使用自动映射器从 HttpPostedFileBase 映射到 Byte[]

标签 c# 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();
                }));

我在 s 上遇到错误:无法将带有语句主体的 lambda 表达式转换为表达式树。

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

最佳答案

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

  1. 使用 custom type converter :

    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();        
        }
    }
    

    用法:

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

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

关于c# - 使用自动映射器从 HttpPostedFileBase 映射到 Byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25242783/

相关文章:

c# - Automapper:序列不包含任何元素。

c# - 如何使用 AfterMap 将属性映射到集合属性

ASP.NET MVC - 将搜索条件作为输入,并在同一 View 中显示结果

c# - 如何在不发出其他请求的情况下在编辑操作中使用 ViewModel?

asp.net - aspnet-mvc5中身份验证和授权过滤器的区别

c# - 如何让AutoMapper使用接口(interface)映射和具体映射

c# - 我可以在 Twilio API 中接收没有 URL 的短信状态吗?

c# - 将属性(名称=值)从 MSBuild 项目写入文件

c# - 正则表达式匹配任何单词 - 没有非贪婪运算符

c# - 在 SQL 语句中,在哪里/如何为占位符放置值