.net core webapi 文件上传在 Swagger 文档中的有好提示处理
程序员文章站
2023-11-03 09:40:57
前提: 需要nuget Swashbuckle.AspNetCore 我暂时用的是 4.01 最新版本; 描述:解决 .net core webapi 上传文件使用的是 IFormFile,在Swagger 接口描叙的时候很不友好,为解决接口文档的友好描叙; 实际效果: 解决办法: 步骤1 增加 S ......
前提:
需要nuget swashbuckle.aspnetcore 我暂时用的是 4.01 最新版本;
描述:解决 .net core webapi 上传文件使用的是 iformfile,在swagger 接口描叙的时候很不友好,为解决接口文档的友好描叙;
实际效果:
解决办法:
步骤1 增加 swagger 的选项过滤器 swaggerfileuploadfilter.cs
/// <summary> /// swagger 上传文件过滤器 /// </summary> public class swaggerfileuploadfilter : ioperationfilter { /// <summary> /// 应用过滤器 /// </summary> /// <param name="operation"></param> /// <param name="context"></param> public void apply(operation operation, operationfiltercontext context) { #region 文件上传处理 if (!context.apidescription.httpmethod.equals("post", stringcomparison.ordinalignorecase) && !context.apidescription.httpmethod.equals("put", stringcomparison.ordinalignorecase)) { return; } var fileparameters = context.apidescription.actiondescriptor.parameters.where(n => n.parametertype == typeof(iformfile)).tolist(); if (fileparameters.count < 0) { return; } operation.consumes.add("multipart/form-data"); foreach (var fileparameter in fileparameters) { var parameter = operation.parameters.single(n => n.name == fileparameter.name); operation.parameters.remove(parameter); operation.parameters.add(new nonbodyparameter { name = parameter.name, in = "formdata", description = parameter.description, required = parameter.required, type = "file" }); } #endregion } }
步骤2 对 startup.cs swagger 配置项进行过滤
services.addswaggergen(options => { .......... options.operationfilter<swaggerfileuploadfilter>(); });
上一篇: 曹操的基石之战——兖州之战