从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(二)
传送门:从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(一)
一、设置Swagger页面为首页——开发环境
我们虽然可以在输入 /swagger 后顺利的访问 Swagger UI 页面,但是我们发现每次运行项目都会默认访问 /weatherforecast 这个接口,想要将启动页设为 /swagger (或者其他页面)就需要用到配置文件 launchSettings.json。
在如下图中所示的位置找到并打开 launchSettings.json 文件,在如下图中所示的地方修改“launchUrl”属性(有该属性则修改,无该属性则手动添加)的值由“weatherforecast”为“swagger”并保存,再一次按 F5 键运行项目就会发现直接访问的地址为“https://localhost:44390/swagger”。

二、设置Swagger页面为首页——生产环境
上述方法在本地调试可以直接运行,但是如果部署到服务器,就会发现之前的那种默认启动首页无效了,还是需要每次手动在域名后边输入“/swagger”。
幸运的是,Swagger 提供了一个扩展,可以指定一个空字符作为 Swagger 的地址。在 Startup.cs 文件的 Startup 类的 Configure 方法中配置中间件,如下图所示,代码如下所示。
#region Swagger
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/DocV1/swagger.json", "DocV1");//此为之前配置内容
c.RoutePrefix = "";//此为本次新增配置项
});
#endregion

然后把配置文件 launchSettings.json 的 launchUrl 属性注释或删除,如下图所示,这样无论是本地开发环境还是生产环境,都可以默认加载 Swagger UI 页面了。

三、添加注释
1、给接口添加注释
首先给接口方法加上注释:打开默认生成的 WeatherForecast 控制器,分别给控制器和接口添加注释,代码如下所示。
/// <summary>
/// 天气预报
/// </summary>
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
/// <summary>
/// 获取天气
/// </summary>
/// <returns></returns>
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}
}
添加好注释之后,接下来就需要把注释信息显示在 Swagger 中,这时候需要用到 XML 文档,因为它是通过 XML 来维护 Swagger 文档的一些信息。
鼠标右键单击项目名称,在弹出的菜单中选择“属性”选项,在属性选项卡页面中的“生成”选项的“输出”选项的“文档文件”选项下,勾选“生成包含API文档的文件”选择框,“XML 文档文件路径”此处使用默认位置,故保留为空,如下图所示。

重新编译项目后,系统会在 bin\Debug\net5.0 路径下默认生成一个与项目名称相同的 XML 文件,前后对比如下图所示。


接下来修改 Swagger 服务注入的代码。在 Startup.cs 文件的 Startup 类的 ConfigureServices 方法中进行修改,代码如下所示。
#region Swagger
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("DocV1", new OpenApiInfo
{
Version = "v0.1.0",
Title = "ZOHC测试文档",
Description = "一个Swagger教程文档",
Contact = new OpenApiContact
{
Name = "张欧昊辰",
Email = "izohc@foxmail.com"
}
});
#region 添加注释新增内容
var basePath = AppContext.BaseDirectory;
var projectName = AppDomain.CurrentDomain.FriendlyName;
var xmlPath = Path.Combine(basePath, projectName + ".xml");
c.IncludeXmlComments(xmlPath, true);
#endregion
});
#endregion
然后按 F5 启动项目,这样控制器和接口注释就都有了,前后对比效果如下图所示。


2、给Model添加注释
新建一个类库,取名为“AllTestDemo.Model”,步骤如下图所示,不再做过多文字叙述。




当类库创建成功后,我们将“AllTestDemo”下的“WeatherForecast.cs”文件移动到新建的类库“AllTestDemo.Model”下,修改命名空间并添加上注释,如下图所示。

我们按照上一小节中给“AllTestDemo”添加 XML 文档的方法,同样给“AllTestDemo.Model”添加 XML 文档。然后回到 Startup.cs 文件的 Startup 类的 ConfigureServices 方法中进行修改,代码如下所示。
var xmlModelPath = Path.Combine(basePath, "AllTestDemo.Model.xml");
c.IncludeXmlComments($"{xmlModelPath}", true);

重新编译项目后,按 F5 启动项目,这样 Model 注释就有了,前后对比效果如下图所示。


四、去掉 Swagger 警告提示
添加 Swagger 包之后,控制器不填写相应的注释,项目会有很多警告,打开错误列表查看,如下图所示。

如果我们不想添加注释,又不想看到这个警告提示,可以这样做。
打开“AllTestDemo”的属性面板,在“生成”选项的“错误和警告”选项的“取消显示警告”选项下,添加“;1591”并保存,注意1591前面有分号且是英文输入法状态下输入的,如下图所示。

“重新生成解决方案”后,我们看到错误列表中“AllTestDemo”项目下的警告已经没有了,仍然能看到“AllTestDemo.Model”项目下的警告信息,如下图所示。

我们可按照上述同样的方法,对“AllTestDemo.Model”进行相同的处理即可。
五、忽略接口信息
如果我们不想展示某个控制器中全部或部分接口的信息,可以在 Controller 上或者 Action 上添加 [ApiExplorerSettings(IgnoreApi = true)] 特性来忽略。
1、不添加特性
为了展示效果,在 WeatherForecastController 中添加了一个 POST 访问类型的方法,代码如下所示。
[HttpPost]
public void Index()
{
}
此时 Swagger UI 显示结果如下图所示。

2、在 Action 上添加特性
我们在系统自动生成的 Get 方法上添加 [ApiExplorerSettings(IgnoreApi = true)] 特性,如下图所示。

按 F5 键项目启动后 Swagger UI 显示如下图所示,对比不添加特性的显示结果,我们发现 Get 类型的方法未展示。

3、在 Controller 上添加特性
我们在系统自动生成的 WeatherForecastController 上添加 [ApiExplorerSettings(IgnoreApi = true)] 特性,如下图所示。

按 F5 键项目启动后 Swagger UI 显示如下图所示,对比不添加特性的显示结果,我们发现没有接口信息展示。

-------------------------------本篇文章到此结束-------------------------------------
从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(二)的更多相关文章
- 新建 ASP.NET Core Web API 项目 -- RESTFul 风格 Hello World!
一.创建一个空项目 请查看 新建 .NET Core 项目 -- Hello World! 一节,新建一个项目: 二.添加引用并修改配置为 Web API (.NET Core 已将 MVC/W ...
- 在ASP.NET Core Web API 项目里无法访问(wwwroot)下的文件
解决办法:在“ Startup.cs ” 文件里的 Configur方法里添加一句代码“ app.UseStaticFiles() ”,这样就可以访问wwwroot下的文件了. - 方法代码是: - ...
- ASP.NET Core Web Api之JWT VS Session VS Cookie(二)
前言 本文我们来探讨下JWT VS Session的问题,这个问题本没有过多的去思考,看到评论讨论太激烈,就花了一点时间去研究和总结,顺便说一句,这就是写博客的好处,一篇博客写出有的可能是经验积累,有 ...
- 在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务
在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务 https://procodeguide.com/programming/polly-in-aspnet-core ...
- Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程
Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一) 图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图.那么如何在Asp.Net Core W ...
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...
- Docker容器环境下ASP.NET Core Web API应用程序的调试
本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器环境下,对ASP.NET Core Web API应用程序进行调试.在 ...
- Docker容器环境下ASP.NET Core Web API
Docker容器环境下ASP.NET Core Web API应用程序的调试 本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Dock ...
- ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现
很长一段时间以来,我都在思考如何在ASP.NET Core的框架下,实现一套完整的事件驱动型架构.这个问题看上去有点大,其实主要目标是为了实现一个基于ASP.NET Core的微服务,它能够非常简单地 ...
- [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了
[译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 本文首发自:博客园 文章地址: https://www.cnblogs.com/yilezhu/p/ ...
随机推荐
- Springboot中使用枚举
枚举映射数据库字段 配置枚举包扫描路径 mybatis-plus: # 扫描通用枚举 type-enums-package: com.xx.**.enums 方法一:@EnumValue 和 @Jso ...
- percona mongo热备
https://www.percona.com/doc/percona-server-for-mongodb/LATEST/hot-backup.html#hot-backup Hot Backup ...
- IT工具知识-13: 如何编辑SVG图像文件并转换为ICO图标文件
使用背景 最近做了个小软件, 但是桌面快捷方式图标不好看, 于是想着找个好看点的图标, 但是网上搜了一圈, 发现好看的几乎都要钱, 常用的话, 付费倒也不反感, 但是, 仅仅只用那么一两次, 为这个付 ...
- 基于C语言的小学生四则运算出题器
一.实验目的以及项目来源: 目的: 1.帮助老师产出随机的海量四则运算符的运算题目. 2.每次题目的产出均为随机,增强同学的四则运算能力. 项目来源: 项目来源于软件开发与创新课程的结对编程,对100 ...
- C Ⅷ
数组 int number[100]; //这个数组可以放100个数 int x; int cnt = 0; double sum = 0; scanf("%d", & ...
- 奇怪的 document.body.onscroll
打开开发者工具, 滚动下面示例页面 See the Pen document.body.onscroll vs document.body.addEventListener('scroll', ... ...
- 转载C#加密方法
方法一: //须添加对System.Web的引用 using System.Web.Security; ... /// <summary> ...
- Mybatis-plus常见报错
1.提示数据库(表)不存在,如图: 原因:mybatis-plus默认查询的表名字为实体类的名字User,并转小写. 解决:添加注解@TableName设置表名
- DOC命令学习(一)
DOC命令学习(一) 命令 切换目录命令(cd) cd /d E: 查看目录命令(dir) dir #查看# 回显命令(echo) @echo offset d = %date:~0,10%set ...
- unidbgrid导出Excel到多个sheet
xls := TXlsFile.Create(true); xls.NewFile; xls.ActiveSheet := 1; xls.SheetName := '未自评人员清单'; xls.Act ...