WEB API 通过 实体上传 字段和 图片列表



我想要的结果:前端上传的文件和字段自动按照实体类对应 然后利用   实体效验   减少 不必要的 if 判断

我写完这个 方法后 测试报错:postman的报错

 

{

    "Message": "此资源不支持请求实体的媒体类型“multipart/form-data”。",

    "ExceptionMessage": "没有可用的 MediaTypeFormatter,无法从媒体类型为“multipart/form-data”的内容中读取类型为“Model”的对象。",

    "ExceptionType": "System.Net.Http.UnsupportedMediaTypeException",

    "StackTrace": "   在 System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n   在 System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)"

}

谷歌浏览器的报错:

为了解决上面的问题 找到了 文章 https://www.cnblogs.com/kingCpp/p/4901268.html   了解到 webapi 似乎默认不支持这种方式的上传

在nuget  安装了  MultipartDataMediaFormatter   用来支持 我们直接从实体中获取 文件

安装后 配置一下

  //为了实现通过实体类获取文件
            GlobalConfiguration.Configuration.Formatters.Add(new FormMultipartEncodedMediaTypeFormatter());

如下:

OK 到了 这一步测试下 发现 谷歌浏览器发过来 的 name 映射上了 但是 文件没映射上 但是  

HttpContext.Current.Request.Files 是可以拿到文件的

看看 postman 的情况:发现也是文件映射为 null

HttpContext.Current.Request.Files 是可以拿到文件的

这里为了让 文件映射上 实体类上的 Pictures 改了 各种 Content-type 发现还是没用

既然实体已经进来了 满足我我做实体效验的需求   那这个  文件部分 我们就手动从 HttpContext.Current.Request.Files拿一下 赋值给 Picture  
所以写个方法:

 public static List<HttpPostedFile> GetFileList()
        {
            if (HttpContext.Current.Request.Files.Count==0)
                return null;

            List<HttpPostedFile> res = new List<HttpPostedFile>();
            for (int i = 0; i < HttpContext.Current.Request.Files.Count; i++)
            {
                res.Add(HttpContext.Current.Request.Files[i]);
            }
            return res;
        }

然后 就可以愉快玩耍了  

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章