首页 > 其他分享 >如何在 .NET Core WebApi 中处理 MultipartFormDataContent

如何在 .NET Core WebApi 中处理 MultipartFormDataContent

时间:2023-04-19 19:34:54浏览次数:37  
标签:WebApi Core Framework 接口 MultipartFormDataContent 内容 NET

最近在对某个后端服务做 .NET Core 升级时,里面使用了多处处理 MultipartFormDataContent 相关内容的代码。这些地方从 .NET Framework 迁移到 .NET Core 之后的代码改动较大,由于本身没有测试覆盖,导致在部署 QA 环境后引发了一些问题。这里做一个技术复盘。

什么是 MultipartFormDataContent

我们在做后端接口开发的时候,常常会涉及到接口参数为多种类型的情况,比如值类型,引用类型,或者是文件类型。如果我们需要在一个接口参数中同时传递多种不多的数据类型,那么这个时候就需要用到 multipart/form-data MIME 类型进行内容编码,然后传递给后端。比如我们需要往后端接口传递一个同时包含文件和字符串文本的话,使用 Postman 你可以这样构造内容:

对应的 HTTP 请求内容则类似是这样:

MultipartFormDataContent 的写操作

在 C# 中,我们通常会使用 HttpClient 这个类型的实例对象来进行接口请求,对应实例代码如下所示:

在这个请求构造中,我们尝试在内存中创建一个压缩文件 test.zip,然后再构造一个简单的文本内容,并将这两部分内容统一放到Body 中通过 HttpClient 发送到后端。

MultipartFormDataContent 的读操作

.NET Framework

在传统 Framework 项目中,我们可以通过构造出 MultipartMemoryStreamProvider 类型来方便解析接收到的 MultipartFormDataContent 对象,但是由于这个类型在 .NET Core 中已经被不存在,所以我们需要尝试新的方法来重构这一块的代码。

.NET Core

方式一

由于接收到的 MultipartFormDataContent 对象内部是由多个 Section 所组成,所以我们可以通过循环每个 Section 的方式来分别解析所有内容。

⚠️ 这种读取方式较复杂,并且从目前已经使用过这种方式的服务来讲的话,建议要有对应的测试覆盖。

方式二

这种方式是通过借助 ASP.NET Core 本身的框架封装,将原本复杂的 MultipartFormDataContent 直接放到 Request.Form 中,所以我们只需要通过这个对象来拿我们想要的数据即可。

标签:WebApi,Core,Framework,接口,MultipartFormDataContent,内容,NET
From: https://www.cnblogs.com/hippieZhou/p/17316116.html

相关文章

  • Crash on AIX produces no core or a truncated core
    CrashonAIXproducesnocoreoratruncatedcoreTroubleshootingProblemThisdocumentoutlineswhatneedstobedonetoensurethatafullcorefileisproducedonAIXifWebSphereApplicationServercrashes.ResolvingTheProblemSystemc......
  • AspNetCore 成长杂记(一):JWT授权鉴权之生成JWT(其一)
    引子最近不知怎么的,自从学了WebAPI(为什么是这个,而不是MVC,还不是因为MVC的Razor语法比较难学,生态不如现有的Vue等框架,webapi很好的结合了前端生态)以后,使用别人的组件一帆风顺,但是不知其意,突然很想自己实现一个基于的JWT认证服务,来好好了解一下这个内容。起步自从Session-Cooki......
  • api-ms-win-core-file-l1-2-0.dll文件问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或者损坏了,这时你只需下载这个api-ms-win-core-file-l1-2-0.dll文件进行安装(前提是找到适合的版本),当我们执行某......
  • 19c环境,运行DBCA创建CDB时,报错ORA-01519: error while processing file:?/rdbms/admin
    1、同事新搭建的一套19CRAC,补丁为19.10,运行DBCA安装CDB数据库时报错,错误日志如下所示:ORA-01519:errorwhileprocessingfile:?/rdbms/admin/dcore.bsq.....ORA-00604:erroroccurredatrecursiveSQLlevel1ORA-01119:errorincreatingdatabasefile'+DATA01/CDB1/pdb......
  • ASP.NET Core - 缓存之分布式缓存
    分布式缓存是由多个应用服务器共享的缓存,通常作为访问它的应用服务器的外部服务进行维护。分布式缓存可以提高ASP.NETCore应用的性能和可伸缩性,尤其是当应用由云服务或服务器场托管时。与其他将缓存数据存储在单个应用服务器上的缓存方案相比,分布式缓存具有多个优势。当分发......
  • 成功解决OSError: [E050] Can’t find model ‘en_core_web_sm’.
    成功解决OSError:[E050]Can'tfindmodel'en_core_web_sm'.问题描述在安装spacy包之后,再加载'en_core_web_sm'语言模型时,报出OSError:[E050]Can'tfindmodel'en_core_web_sm'.Itdoesn'tseemtobeaPythonpackageoravalidpathtoa......
  • 2023 ASP.NET Core 开发者路线图
    链接ASP.NETCoreDeveloperRoadmap......
  • 面向接口编程实践之aspnetcoreapi的抽象
    最为一名越过菜鸟之后的开发,需要做接口开发。下面做一个纯粹的接口编程的实例demo,仅仅是一个webapi接口的抽象。下面是代码接口,AbsEFWork是webapi,BaseEntityFramework是一个接口库。先介绍一下webapi的实现,代码是从底层往上层写的,阅读代码的习惯应该是自上向下。publiccla......
  • 【愚公系列】2023年04月 .NET CORE工具案例-DeveloperSharp的使用(数据库)
    (文章目录)前言DeveloperSharp是一个研发中大型项目必备的系统平台。也是一个低代码平台。它主要包括了如下一些功能:基于Sql语句、存储过程、事务、分页的数据库操作。并几乎支持市面上所有种类的数据库。图片操作。裁剪、缩放、加水印。http请求调用(Post与Get)高效分页We......
  • 类库项目无法引用Microsoft.AspNetCore程序集下的类库
    在类库项目中不能直接引用WebApplicationBuilder、ApplicationBuilder等类,这些类位于Microsoft.ASPNetCore程序集中,但是无法通过Nuget包引用,因为该Nuget包的版本已经不再支持,很久没有更新过了。解决方法:在项目文件csproj文件中,在ItemGroup下手动添加引用<FrameworkReferenceInc......