.NetCore WebApi利用Swagger文档实现选择文件上传
2024-10-05 05:14:09
介绍
实现这个功能主要还是依赖过滤器
在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
}
}
选择文件运行下 两个文件都接受到了
最新文章
- 使用mvn archetype:generate生产maven工程,响应很慢
- [LeetCode] Copy List with Random Pointer 拷贝带有随机指针的链表
- Oracle数据库安装图文操作步骤
- Web Serveice服务代理类生成及编译
- jQuery实现表格行的动态增加与删除 序号 从 1开始排列
- Excel中设置下拉列表的来源怎么选择其他工作表的内容
- nodejs的第一天学习笔记
- JavaScript基础11——js的全局函数
- Java核心技术II读书笔记(一)
- Codevs_1166_[NOIP2007]_矩阵取数游戏_(动态规划+高精度)
- java.lang.IllegalStateException at org.apache.catalina.connector.ResponseFacade
- 新出台的治理iMessage垃圾短信的规则
- final、finally和finalize的区别
- 性能优化-YAHOO军规
- ethereum/EIPs-1102 Opt-in provider access metamask不再默认直接连入网页
- App Store转让App
- django的csrf
- 转发:centos彻底删除文件夹、文件命令(centos 新建、删除、移动、复制等命令)
- 在css中 父元素不固定高度,怎样实现子元素的高度100%
- 20个令人惊叹的音乐应用程序UI,值得收藏