.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 ...
随机推荐
- 51Nod 1287 加农炮 (线段树)
1287 加农炮 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个长度为M的正整数数组A,表示从左向右的地形高度 ...
- MT【112】单变量化
评:降维,单变量是我们不懈的追求
- 【BZOJ1078】[SCOI2008]斜堆(性质题)
[BZOJ1078][SCOI2008]斜堆(性质题) 题面 BZOJ 洛谷 题解 考虑一下这道题目的性质吧.思考一下最后插入进来的数是什么样子的.首先因为它是最后插入进来的,所以一定是比某个数小,然 ...
- 【BZOJ3489】A simple rmq problem(KD-Tree)
[BZOJ3489]A simple rmq problem(KD-Tree) 题面 BZOJ 题解 直接做肯定不好做,首先我们知道我们是一个二维平面数点,但是限制区间只能出现一次很不好办,那么我们给 ...
- 洛谷 P2224 [HNOI2001]产品加工 解题报告
P2224 [HNOI2001]产品加工 题目描述 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需 ...
- 【bzoj3172】 Tjoi2013—单词
http://www.lydsy.com/JudgeOnline/problem.php?id=3172 (题目链接) 题意 $n$个单词组成文本,问每个单词在文本中出现了几次. Solution 题 ...
- 前端学习 -- Css -- 文本标签
em和strong - 这两个标签都表示一个强调的内容, em主要表示语气上的强调,em在浏览器中默认使用斜体显示 strong表示强调的内容,比em更强烈,默认使用粗体显示 <!DOCTYPE ...
- CDN中,字体文件的跨域问题和解决
@font-face是CSS3中的一个特性,可以把自己定义的Web字体嵌入到网页中,随着@font-face,越来越多的网页采用字体图标作为网页中的小图形. 比如Bootstrap就采用了Glyphi ...
- C/C++ exception类
#include <iostream> #include <iomanip> #include <string> #include <sstream> ...
- OpenStack 存储服务 Cinder介绍和控制节点部署(十五)
Cinder介绍 OpenStack块存储服务(cinder)为虚拟机添加持久的存储,块存储提供一个基础设施为了管理卷,以及和OpenStack计算服务交互,为实例提供卷.此服务也会激活管理卷的快照和 ...