.NetCore WebApi利用Swagger文档实现选择文件上传
介绍
实现这个功能主要还是依赖过滤器
在Swagger中利用 IOperationFilter 操作来实现文件上传
与之前处理结合Idr4授权一样的处理方式,不同的是授权处理的是Security,而文件上传要处理的是Parameters,具体是IFormFile参数处理
IFormFile 在 Microsoft.AspNetCore.Http 命名空间下
怎么来处理呢?
options.OperationFilter<IdentityServer4OAuth2OperationFilter>();
这是之前处理授权用的,名称就这样了,接下来我在里面去处理
处理方式有几种
你可以根据路由来判断也可以根据参数类型来处理,这里我根据参数类型来处理,只要包含了IFormFile 就生成该文件
第一步:获取IFormFile 参数类型的 参数
var files = context.ApiDescription.ActionDescriptor.Parameters.Where(n => n.ParameterType == typeof(IFormFile)).ToList();
第二步:遍历替换这些参数
for (int i = ; i < files.Count; i++)
{
if (i == )
{
operation.Parameters.Clear();
}
operation.Parameters.Add(new NonBodyParameter
{
Name = files[i].Name,
In = "formData",
Description = "Upload File",
Required = true,
Type = "file"
}); }
operation.Consumes.Add("multipart/form-data");
这里需要注意的就是这句话
operation.Parameters.Clear();
需要清除原来中的参数,如果不清除你会看到下面的效果(富含了原有参数 IFormFile)

清除了之后看下实际效果,其实就是替换掉原有的参数形式

这里还有一点值得注意的就是 请求的参数要与 重新添加的参数名称要一致 不然提交获取不到相关的文件信息(如果你是手写的话要注意这点,我这里是动态获取的参数,所以不存在这个问题)


下面是完成代码,这里面附带了 Idr4的授权 不需要可以删除掉
public class IdentityServer4OAuth2OperationFilter : IOperationFilter
{
public void Apply(Operation operation, OperationFilterContext context)
{ #region Swagger授权处理
if (operation.Security == null)
{
operation.Security = new List<IDictionary<string, IEnumerable<string>>>();
}
else
{
operation.Security.Add(new Dictionary<string, IEnumerable<string>>
{ {"oauth2", new List<string> { "openid", "profile", "userservicesapi" }}
});
}
#endregion #region Swagger 文件上传处理 var files = context.ApiDescription.ActionDescriptor.Parameters.Where(n => n.ParameterType == typeof(IFormFile)).ToList();
if (files.Count > )
{
for (int i = ; i < files.Count; i++)
{
if (i == )
{
operation.Parameters.Clear();
}
operation.Parameters.Add(new NonBodyParameter
{
Name = files[i].Name,
In = "formData",
Description = "Upload File",
Required = true,
Type = "file"
}); }
operation.Consumes.Add("multipart/form-data");
}
#endregion
}
}
选择文件运行下 两个文件都接受到了



.NetCore WebApi利用Swagger文档实现选择文件上传的更多相关文章
- 使用Swashbuckle.AspNetCore生成.NetCore WEBAPI的接口文档
一.问题 使用Swashbuckle.AspNetCore生成.NetCore WEBAPI的接口文档的方法 二.解决方案 参考文章:https://docs.microsoft.com/zh-cn/ ...
- (转)WebApi发送HTML表单数据:文件上传与多部分MIME
5.3 Sending HTML Form Data5.3 发送HTML表单数据(2) 本文引自:http://www.cnblogs.com/r01cn/archive/2012/12/20/282 ...
- WebApi发送HTML表单数据:文件上传与多部分MIME
5.3 Sending HTML Form Data5.3 发送HTML表单数据(2) 本文引自:http://www.cnblogs.com/r01cn/archive/2012/12/20/282 ...
- 利用百度编辑器和IIS限制文件上传的大小
1.百度编辑器的大小限制 针对不同的文件类型限制大小 例如图片是imageMaxSize ,依次类推 /* 前后端通信相关的配置,注释只允许使用多行方式 */ { /* 上传图片配置项 */ ...
- spring mvc利用MultipartResolver解析Multipart/form-data进行文件上传
之前的表单数据都是文本数据,现记录:利用MultipartResolver进行文件上传. ①首先,需引入commons-fileUpload和commons-io jar包,pom.xml文件的坐标: ...
- 基于Picture Library创建的图片文档库中的上传多个文件功能(upload multiple files)报错怎么解决?
复现过程 首先,我创建了一个基于Picture Library的图片文档库,名字是 Pic Lib 创建完毕后,我点击它的Upload 下拉菜单,点击Upload Picture按钮 在弹出的对话框中 ...
- pytest文档56-插件打包上传到 pypi 库
前言 pytest 的插件完成之后,可以上传到 github,方便其他小伙伴通过 pip 源码安装.如果我们想通过 pip install packages 这种方式安装的话,需上传到 pypi 仓库 ...
- Java 利用Apache Commons Net 实现 FTP文件上传下载
package woxingwosu; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ...
- HTML5+ 拍照上传 和选择文件上传
HTML 页面内容包含以下标签即可: <input id="btn_select" type="button" value="从相册选择&quo ...
随机推荐
- 【设计模式】—— 中介者模式Mediator
前言:[模式总览]——————————by xingoo 模式意图 使用一个中介的对象,封装一组对象之间的交互,这样这些对象就可以不用彼此耦合. 这个中介者常常起着中间桥梁的作用,使其他的对象可以利用 ...
- MongoDB高级操作(2)
查询方法-常用查询方法 查询多条数据 --db.集合名称.find({条件文档}) 查询一条数据 --db.集合名称.findOne({条件文档}) 结果格式化 --pretty()方法 --db.集 ...
- kubeadm安装部署kubernetes 1.11.3(单主节点)
由于此处docker代理无法使用,因此,请各位设置有效代理进行部署,勿使用文档中的docker代理.整体部署步骤不用改动.谢谢各位支持. 1.部署背景 操作系统版本:CentOS Linux rele ...
- Lua 调试库
Lua 调试库 http://blog.csdn.net/vermilliontear/article/details/50851045 http://blog.csdn.net/vermillion ...
- BZOJ 3993 [SDOI2015]星际战争 | 网络流 二分答案
链接 BZOJ 3993 题解 这道题挺棵的-- 二分答案t,然后源点向武器连t * b[i], 武器向能攻击的敌人连1, 敌人向汇点连a[i],如果最大流等于所有敌人的a[i]之和则可行. #inc ...
- BZOJ4589 Hard Nim(快速沃尔什变换FWT)
这是我第一道独立做出来的FWT的题目,所以写篇随笔纪念一下. (这还要纪念,我太弱了) 题目链接: BZOJ 题目大意:两人玩nim游戏(多堆石子,每次可以从其中一堆取任意多个,不能操作就输).$T$ ...
- 使用tushare的pandas进行to_sql操作时的No module named 'MySQLdb'错误处理
先写在前面,用tushare获取财经类数据时,完全没有必要用python3版本 py2功能没差别,但是py3有很多地方需要修改参数才能成功运行,无端造成时间的浪费 下面进入正题,这个问题困扰了我一个下 ...
- JDK环境变量的配置1
JDK环境变量的配置 ... 1.安装完JDK后配置环境变量 计算机→属性→高级系统设置→高级→环境变量 2.系统变量→新建 JAVA_HOME 变量 .变量值填写jdk的安装目录(我的安装目录 ...
- 将Sql查询语句获取的数据插入到List列表里面
Sql查询语句获取的数据是分格式的,我们还用SqlDataReader来做,然后用IDataReader来接收读取,以下是代码: //我想查询一个用户表的信息,该用户有姓名,密码,信息三列 //1.定 ...
- OpenGL ES 2.0 Shader 调试新思路(一): 改变提问方式
OpenGL ES 2.0 Shader 调试新思路(一): 改变提问方式 --是什么(答案是具体值) VS 是不是(答案是布尔值) 目录 背景介绍 问题描述 Codea 是 iPad 上的一款很方便 ...