栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从HttpClient提交文件和Json数据到webapi

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从HttpClient提交文件和Json数据到webapi

我尝试了多种方法来提交文件数据和元数据,这是我发现的最佳方法:

不要使用MultipartFormDataContent,仅将StreamContent用于文件数据。这样,您就可以流式传输文件上传,因此您不会在服务器上占用过多的RAM。MultipartFormDataContent要求您将整个请求加载到内存中,然后将文件保存到某处的本地存储中。通过流传输,还具有将流复制到其他位置(例如Azure存储容器)的好处。

这解决了二进制数据以及元数据的问题。为此,请使用自定义标头并将您的JSON序列化为该标头。您的控制器可以读取自定义标头并将其反序列化为元数据dto,这是大量数据。如果需要更多空间,则可以执行两个单独的请求,一个请求发布最低需求,然后执行PATCH更新需要比头文件容纳更多的任何属性。

样例代码:

public class RegulationFilesController : baseApiController{    public async Task<IHttpActionResult> Post()    {        var isMultipart = this.Request.Content.IsMimeMultipartContent();        if (isMultipart)        { return this.BadRequest("only binary uploads are accepted.");        }        var headerDto = this.GetJsonDataHeader<RegulationFileDto>();        if(headerDto == null)        { return this.BadRequest("Missing X-JsonData header.");        }        using (var stream = await this.Request.Content.ReadAsStreamAsync())        { if (stream == null || stream.Length == 0) {     return this.BadRequest("Invalid binary data."); } //save stream to disk or copy to another stream var model = new RegulationFile(headerDto); //save your model to the database var dto = new RegulationFileDto(model); var uri = new Uri("NEW URI HERE"); return this.Created(uri, dto);        }    }    private T GetJsonDataHeader<T>()    {        IEnumerable<string> headerCollection;        if (!this.Request.Headers.TryGetValues("X-JsonData", out headerCollection))        { return default(T);        }        var headerItems = headerCollection.ToList();        if (headerItems.Count() != 1)        { return default(T);        }        var meta = headerItems.FirstOrDefault();        return !string.IsNullOrWhiteSpace(meta) ? JsonConvert.DeserializeObject<T>(meta) : default(T);    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/415695.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号