全球信息:ASP .NET Core从零到壹 || Swagger配置(一)
ASP .NET Core系列之Swagger配置(一)
官方文档:带有 Swagger/OpenAPI 的 ASP.NET Core Web API 文档 | Microsoft Learn
开发环境:VS2022+net6
(资料图)
目录
- 启用OpenAPI
- 版本控制
- 注释显示
- Token传递
- 文件上传按钮
启用OpenAPI支持(建议)
在新建项目时,建议勾选启用OpenAPI支持,勾选后会自动添加Swagger基本配置,直接看下一节即可
手动添加OpenAPI
- 安装Nuget包
Install-Package Swashbuckle.AspNetCore -Version 6.2.3
- 改造Program.cs在
var app = builder.Build();
前添加:
builder.Services.AddEndpointsApiExplorer();builder.Services.AddSwaggerGen()
在var app = builder.Build();
后添加:
app.UseSwagger();app.UseSwaggerUI();
版本控制
- 新建版本说明类
public enum ApiVersions{/// /// 第一版/// V1,/// /// 第二版/// V2}
- 改造Program.cs
builder.Services.AddSwaggerGen(options =>{ #region 分版本的Swagger配置 //要启用swagger版本控制要在api控制器或者方法上添加特性[ApiExplorerSettings(GroupName = "版本号")],这里是枚举 typeof(ApiVersions).GetEnumNames().ToList().ForEach(version => { options.SwaggerDoc(version, new Microsoft.OpenApi.Models.OpenApiInfo() { Title = $"当前版本{version}", Version = version, Description = $"这是第{version}版本" }); }); #endregion});
app.UseSwaggerUI(opotions =>{ typeof(ApiVersions).GetEnumNames().ToList().ForEach(version => { opotions.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"版本:{version}"); });});
- 在控制器或操作方法上标记版本
[ApiExplorerSettings(GroupName = nameof(ApiVersions.V1))]public class WeatherForecastController : ControllerBase
注释显示
显示效果
- 生成XML注释文档
本质:生成一个WebApplication1.xml文件注意:如果参数的Model在其它类库,那么所引用的类库的.csproj文件也要加上上面的标识,并在Program.cs引入程序集的xml文件才能展示参数的注释
- 改造Program.cs文件
builder.Services.AddSwaggerGen(options =>{ #region 显示注释 // xml文档绝对路径 var file = Path.Combine(AppContext.BaseDirectory, "WebApplication1.xml"); //true:显示控制器层注释 options.IncludeXmlComments(file, true); //对action的名称进行排序,如果有多个,就可以看见效果了。 options.OrderActionsBy(o => o.RelativePath); #endregion});
Token传递
效果显示
改造Program.cs文件:
builder.Services.AddSwaggerGen(options =>{ #region 传入Token //添加安全定义 options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Description = "请输入token,格式为Bearer xxxxxxxx(注意中间必须有空格)", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.ApiKey, BearerFormat = "JWT", Scheme = "Bearer" }); // 添加安全要求 options.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, new List() } }); #endregion});
文件上传
效果显示
默认来说,Swagger是没有选择文件这个按钮的,但是当有API是要接收文件时就不方便测试了,这里可以通过增加一个IOperationFilter
,也就是重写操作某个特定API的的过滤器来实现。
net6自带的Swagger支持的是OpenAPI 3,需要根据OpenAPI 3的规范来实现。
OpenAPI 3规范:
requestBody: content: multipart/form-data: schema: type: object properties: fileName: type: string format: binary
实现方式:
- 根据上面的规范,重新设置requestBody,代码如下:
public class FileUploadFilter : IOperationFilter{ public void Apply(OpenApiOperation operation, OperationFilterContext context) { //判断上传文件的类型,只有上传的类型是IFormCollection的才进行重写。 if (context.ApiDescription.ActionDescriptor.Parameters.Any(w => w.ParameterType == typeof(IFormCollection))) { Dictionary schema = new Dictionary(); schema["fileName"] = new OpenApiSchema { Description = "Select file", Type = "string", Format = "binary" }; Dictionary content = new Dictionary(); content["multipart/form-data"] = new OpenApiMediaType { Schema = new OpenApiSchema { Type = "object", Properties = schema } }; operation.RequestBody = new OpenApiRequestBody() { Content = content }; } }}
- 改造Program.cs
builder.Services.AddSwaggerGen(options =>{ #region 文件上传按钮 options.OperationFilter(); #endregion}
- 控制器方法示例
[HttpPost]public JsonResult UploadFile(IFormCollection form){ return new JsonResult(new { Success = true, Message = "上传成功", FileName = form.Files.FirstOrDefault()?.FileName });}
关键词:
-
全球信息:ASP .NET Core从零到壹 || Swagger配置(一)
2023-04-20 -
大风Ⅳ级!信阳市气象局发布重要天气预警报告-环球观热点
2023-04-20 -
京津冀首次签订重点保护企业品牌备忘录 强化知识产权保护|环球快播
2023-04-20 -
世界观点:今日,宗利群在八宝山举办悼念仪式,现场画面曝光人山人海
2023-04-20 -
北京长峰医院火灾事故初步调查结果公布:医院内部施工作业火花引发-观天下
2023-04-20 -
冠盛股份: 关于2021年限制性股票激励计划首次授予部分第二个解除限售期解除限售暨上市的公告|当前热点
2023-04-20 -
环球即时:一盒冰淇淋引发的血案!上海车展宝马MINI展台区别对待访客,宝马欧股跌超3%市值蒸发21亿欧元
2023-04-20 -
中外跳水健儿西安体验非遗风韵 感受中华优秀传统文化
2023-04-20 -
2023年四川注会报名时间截止到4月28日-世界微速讯
2023-04-20 -
7月10日到任 Stellantis任命新CFO 曾长期在阿迪任职
2023-04-20 -
天天新消息丨欧新U6(关于欧新U6介绍)
2023-04-20 -
环球播报:商务部:今年以来新签约外资项目300多个
2023-04-20 -
*ST长方: 截至2023年4月10日,公司股东户数为27,905户|天天速讯
2023-04-20 -
【利率债发行结果】23河南23票面利率为2.7900%
2023-04-20 -
世界最资讯丨如何安装车道排水沟_女儿满18岁送什么礼物比较好呢
2023-04-20 -
当前速读:强势回暖!牛股辈出的医药板块,2023如何投?重磅解读来袭...
2023-04-20 -
当前聚焦:广元市苍溪县市场监管局全面开通经营主体信用修复“绿色通道”
2023-04-20 -
2023上海车展:售20万-25万元,比亚迪驱逐舰07正式全球首发 全球信息
2023-04-20 -
网贷不还钱最后会怎么处理?信用卡逾期多久会上黑名单?-天天看点
2023-04-20 -
上海职工医保报销新规2023年最新标准如下!
2023-04-20 -
南华期货:锡价暴涨!缅甸禁止锡矿开采对锡元素供给的影响几何?
2023-04-20 -
帕罗洛:国米没给球员归属感,球员在欧冠中捍卫自己并各自为战|当前滚动
2023-04-20 -
鸽蛋煮几分钟能熟_鸽蛋|焦点精选
2023-04-20 -
妇炎丸的功效和副作用_妇炎丸 世界简讯
2023-04-20 -
安徽最新公告!事关未成年人保护!-天天热推荐
2023-04-20 -
高标准农田建设有序推进 一季度我国已建成高标准农田超1900万亩
2023-04-20 -
灌木类植物对耕作层影响-灌木类植物
2023-04-20 -
快消息!嘉诺科技IPO:财务数据垫底且现金流捉急
2023-04-20 -
微资讯!e是多少10的几次方_e是多少
2023-04-20 -
即时:鬼的部首是什么偏旁(鬼的部首)
2023-04-20
-
守住网络直播的伦理底线
2021-12-16 -
石窟寺文化需要基于保护的“新开发”
2021-12-16 -
电影工作者不能远离生活
2021-12-16 -
提升隧道安全管控能力 智慧高速让司乘安心
2021-12-16 -
人民财评:提升消费体验,服务同样重要
2021-12-16 -
卫冕?突破?旗手?——武大靖留给北京冬奥会三大悬念
2021-12-16 -
新能源车险专属条款出台“三电”系统、起火燃烧等都可保
2021-12-16 -
美术作品中的党史 | 第97集《窗外》
2021-12-16 -
基金销售业务违规!浦发银行厦门分行等被厦门证监局责令改正
2021-12-16 -
保持稳定发展有支撑——从11月“成绩单”看中国经济走势
2021-12-16