网站首页 > 博客文章 正文
Swagger 是一个用于构建、文档化和测试 RESTful API 的开源框架,它可以自动生成 API 文档、提供在线调试界面等功能。在 ASP.NET Core 中,可以使用 Swagger 中间件来实现 API 文档的自动生成。在VS中创建API解决方案默认Swagger接口文档,但是接口文档UI都是默认的,对于中文不是很友好,默认不会现在每个接口的注释名称,下面我从默认配置和两个微调方式优化API文档。
、默认配置
在VS中新建创建API项目时候,启用OpenAPI支持即可默认增加Swagger文档支持。然后在项目文档中生成输出,包含生成的API文档的文件勾选上,如下图所示:
我们开发一个Action作为测试代码如下:
/// <summary>
/// 获取天气.
/// </summary>
/// <returns></returns>
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
结果展示:
文档虽然显示相关接口,但是未按我们期望的注释作为名称展示。下面我们进行简单优化,让其符合我们预期期望。
2、SwaggerOperation 增加注释
SwaggerOperation 是一个有用的属性,您可以在其中设置单个请求/路由的摘要、描述、ID 和标签。
首先引入
Swashbuckle.AspNetCore.Annotations包,然后我们需要在Program.cs 启用注释,代码如下:
builder.Services.AddSwaggerGen(c =>
{
c.EnableAnnotations();
c.SwaggerDoc("v1", new OpenApiInfo { Title = "My Test API", Version = "v1" });
});
我们只在原理代码增加c.EnableAnnotations(); 开启注释。然后我们最后我们调整API接口。使用SwaggerOperation进行注释标记。
/// <summary>
/// 获取天气.
/// </summary>
/// <returns></returns>
[HttpGet(Name = "GetWeatherForecast")]
[SwaggerOperation(Summary = "获取天气接口", Description = "获取天气")]
[SwaggerResponse(StatusCodes.Status200OK, "OK", typeof(IEnumerable<WeatherForecast>))]
[SwaggerResponse(StatusCodes.Status404NotFound, "Not Found")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
现在我们查看下实例结果,下图显示了摘要和说明在 swagger UI 文档中的显示方式:
3、统一配置自定义CustomOperationIds
SwaggerOperation 增加注释需要在每个接口自定义,设想采用统一方式,不额外增加代码,实现注释作为API文档名称。我们先包含所有的XML文档输出文件,然后自定义CustomOperationIds 扩展Swagger的OperationId。代码如下:
builder.Services.AddSwaggerGen(c =>
{
//c.EnableAnnotations();
c.SwaggerDoc("v1", new OpenApiInfo { Title = "My Test API", Version = "v1" });
var basePath = PlatformServices.Default.Application.ApplicationBasePath;
foreach (var xmlFile in Directory.GetFiles(basePath, "*.xml"))
{
//包含控制器 Xml 注释
c.IncludeXmlComments(xmlFile, true);
}
// 自定义菜单ID
c.CustomOperationIds(apiDesc =>
{
var controllerAction = apiDesc.ActionDescriptor as ControllerActionDescriptor;
return controllerAction.ControllerName + "-" + controllerAction.ActionName;
});
c.UseInlineDefinitionsForEnums();
});
这样API Action只需要简单注释。如下所示:
/// <summary>
/// 获取天气.
/// </summary>
/// <returns></returns>
[HttpGet(Name = "GetWeatherForecast")]
//[SwaggerOperation(Summary = "获取天气接口", Description = "获取天气")]
//[SwaggerResponse(StatusCodes.Status200OK, "OK", typeof(IEnumerable<WeatherForecast>))]
//[SwaggerResponse(StatusCodes.Status404NotFound, "Not Found")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
下图显示了不同状态代码的 SwaggerResponse 如何在 swagger UI 文档中显示:
虽然第三种方式不如第二种方式内容多,但是不需要额外对每个Action 增加特性标记,只需要写相关注释即可。
总结
综上所述,使用 Swagger 中间件可以方便地实现 ASP.NET Core 应用的 API 文档自动生成和在线调试功能。只需要安装 Swashbuckle.AspNetCore 包,配置 Swagger 中间件,生成 API 文档,然后就可以通过访问 /swagger 终端点来查看 API 文档。同时也可以通过特性来自定义 Swagger 文档。如上两种方式非常适合中文习惯。当然最好使用UseKnife4UI 进行文档展示效果更佳。
欢迎大家对Swagger文档有使用过程中有什么好的想法或者什么问题,欢迎大家一起学习,留言板见,谢谢。
猜你喜欢
- 2025-05-26 就用它了!Gateway网关下的Swagger/OpenAPI3文档聚合
- 2025-05-26 使用Swager API Docs和easy-mock生成模拟数据
- 2025-05-26 API 文档也能这么好看?ASP.NET Core 集成 Knife4j
- 2025-05-26 手把手搭建koa2后端服务器-API文档生成(番外)
- 2025-05-26 后端团队用Swagger生成API文档,却漏了这行注解让参数传不进去
- 2025-05-26 /null/swagger-resources/死循环,升级swagger2.0到3.0踩坑记录
- 2025-05-26 前端同事老是说swagger不好用,我用了knife4j后,同事爽得不行
- 2025-05-26 SpringBoot 在生产快速禁用Swagger2
- 2025-05-26 了解Swagger规范检查点
- 2025-05-26 swagger-editor编写好api文档在哪用?这个工具你也得了解
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)