Swagger UI in AspNetCore WebAPI
Swagger其实包含了三个部分,分别是Swagger Editor文档接口编辑器,根据接口文档生成code的Swagger Codegen,以及生成在线文档的Swagger UI。
在AspNetCore中通常使用Microsoft封装的Swashbuckle来使用Swagger UI,这是一个AspNetCore的中间件。和其他中间件一样都是分为register和use两个部分。Swagger UI主要通过将特殊特性标注过的API信息生成一个OpenAPI的文档,再将文档上的信息已网页的形式显示给用户。
Installation
VS中很简单,直接用NuGet安装Swashbuckle.AspNetCore即可。

或者使用命令行: dotnet add package --version xxx Swashbuckle.AspNetCore
Register
所有Swagger UI注册的configue相关的内容都放在AddSwaggerGen这个方法里面:
namespace Microsoft.Extensions.DependencyInjection
{
public static class SwaggerGenServiceCollectionExtensions
{
public static IServiceCollection AddSwaggerGen(this IServiceCollection services, Action<SwaggerGenOptions> setupAction = null);
public static void ConfigureSwaggerGen(this IServiceCollection services, Action<SwaggerGenOptions> setupAction);
}
}
AddSwaggerGen这个方法主要用户注册中间件的时候添加一些参数,其中重要的有:
SwaggerDoc
添加一个swagger document,主要用户存储生成出来的OpenAPI文档。以及一些文档基本信息,如:作者、描述、license等。
XXXFilter
自定义filter,XXX为Swagger中的对象,当XXX创建完成后,filter可以定义操作对XXX进行处理。
AddSecurityDefinition和AddSecurityRequirement
用于给Swagger添加验证的部分。
IncludeXmlComments
为OpenAPI提供注释内容的xml,需要在IDE里面配置生成对应的XML文件。(当vs中使用生成xml文档文件这个功能的时候,如果有方法没有添加注释,vs会有提示,如果要避免这个提示,可以在下图中的Suppress warnings中把1591禁掉。)

MapType
很多时候,json的类型会有自定义的转化,这个时候需要使用MapType来让Swagger知道这个转化。
举一个PhoneNumber的例子:
public class PhoneNumber
{
public string CountryCode { get; set; } public string AreaCode { get; set; } public string SubscriberId { get; set; }
}
[HttpGet("PhoneNumber")]
public PhoneNumber GetPhoneNumber()
{
return new PhoneNumber()
{
AreaCode = "",
CountryCode = "",
SubscriberId = ""
};
}
如果在AddSwaggerGen中使用了
c.MapType<PhoneNumber>(() => new Schema { Type = "string" });
生成的json的response中就从PhoneNumber类变成了string。
"/market/PhoneNumber": {
"get": {
"tags": [
"Market"
],
"operationId": "GetPhoneNumber",
"consumes": [],
"produces": [
"text/plain",
"application/json",
"text/json"
],
"parameters": [],
"responses": {
"": {
"description": "Success",
"schema": {
"type": "string"
}
}
}
}
}
如果去掉,是这样的。
"/market/PhoneNumber": {
"get": {
"tags": [
"Market"
],
"operationId": "GetPhoneNumber",
"consumes": [],
"produces": [
"text/plain",
"application/json",
"text/json"
],
"parameters": [],
"responses": {
"": {
"description": "Success",
"schema": {
"$ref": "#/definitions/PhoneNumber"
}
}
}
}
}
Use
RouteTemplate
UseSwagger中配置Swagger页面路由信息。默认情况下是swagger/{documentName}/swagger.json
RoutePrefix
类似SharePoint中的host name,默认为swagger,如果不需要可以设置为“”。
SwaggerEndpoint
OpenAPI文件的访问URL,这个url和RouteTemplate以及SwaggerDoc的name一定要一致,不然就会有page not found的错。从浏览器访问json文件的时候url中的document name是区分大小写的。
当请求OpenAPI文件的时候,会从SwaggerEndpoint配置的url中配合RouteTemplate一起解析document的name。
下面是RouteTemplate的配置:
app.UseSwagger(option =>
{
option.RouteTemplate = string.Format("{0}/{1}", prefix, "{documentName}/swagger.json");
});
解析document name的过程。
private bool RequestingSwaggerDocument(HttpRequest request, out string documentName)
2 {
3 documentName = null;
if (request.Method != "GET") return false; var routeValues = new RouteValueDictionary();
if (!_requestMatcher.TryMatch(request.Path, routeValues) || !routeValues.ContainsKey("documentName")) return false; documentName = routeValues["documentName"].ToString();
return true;
11 }
API decorate
ApiExploreri通过AspNetCore的MVC中的routing特性标签来识别api的。
[HttpPost]
public void CreateProduct(Product product)
...
[HttpGet]
public IEnumerable<Product> SearchProducts(string keywords)
...
具体使用方式请参考Routing to controller actions in ASP.NET Core
Reference
Swashbuckle official documentation:https://github.com/domaindrivendev/Swashbuckle.AspNetCore
AspNetCore MVC Routing:https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-3.0
Swagger UI in AspNetCore WebAPI的更多相关文章
- Flask 系列之 构建 Swagger UI 风格的 WebAPI
说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验 环境初始化 # 创建项目目录 mkdir helloworl ...
- 在Abp中集成Swagger UI功能
在Abp中集成Swagger UI功能 1.安装Swashbuckle.Core包 通过NuGet将Swashbuckle.Core包安装到WebApi项目(或Web项目)中. 2.为WebApi方法 ...
- C# ABP WebApi与Swagger UI的集成
本文是配置WebApi与Swagger UI,可以参照 http://www.cnblogs.com/farb/p/ABPSwaggerUIIntegration.html 1. 安装swagger ...
- WebApi使用swagger ui自动生成接口文档
之前就写到.最近正在使用webapi.这里介绍一个实用的东西swageer ui现在开发都是前后端分开.我们这里是给前端提供api.有时候对于一个api的描述,并不想专门写一份文档.很浪费时间.swa ...
- Asp.net WebApi 配置 Swagger UI
首先安装Swashbuckle.Core 然后添加swagger配置文件. [assembly: PreApplicationStartMethod(typeof(SwaggerConfig), &q ...
- 【转】C# ABP WebApi与Swagger UI的集成
以前在做WebAPI调用测试时,一直在使用Fiddler测试工具了,而且这个用起来比较繁琐,需要各种配置,并且不直观,还有一点是还得弄明白URL地址和要传递的参数,然后才能调用. 最近新入职,公司里 ...
- webapi+swagger ui 文档描述
代码:GitHub swagger ui在我们的.NET CORE和.NET Framework中的展现形式是不一样的,如果有了解的,在.NET CORE中的是比.NET Framework好的.两张 ...
- .Net WebApi接口之Swagger UI 隐藏指定接口类或方法
swagger的一个最大的优点是能实时同步api与文档,但有些时候我们不想全部公开接口,而要隐藏或屏蔽一些接口类或方法,swagger也是支持的,只需要设置一下DocumentFilter方法. 第一 ...
- 除了Swagger UI,你还能选择 IGeekFan.AspNetCore.RapiDoc
IGeekFan.AspNetCore.RapiDoc 看到博客园上的这个文章,说了下Knife4J,评论里有人推荐RapiDoc,放了几个图,看了下,还不错. 心里 便有个想法,借着上次研究 Kni ...
随机推荐
- IPv6升级测试指南(Android/iOS/Mac)
目录 我们升级到IPv6的原因 测试的时候的注意要点 Android/IOS/MAC测试总结 Android测试IPv6的方法 IOS端测试IPv6的方法 MAC浏览器端测试IPv6的方法 升级IPV ...
- mkdir函数 (创建文件夹函数)
mkdir函数 #include <stdio.h> int main(){ mkdir("C:\\Users\\admin\\desktop\\test"); ; }
- linux命令-挂载命令
一.挂载命令 1.mount 命令基本格式 linux 所有存储设备都必须挂载使用,包括硬盘 命令名称:mount 命令所在路径:/bin/mount 执行权限:所有用户 [root@localhos ...
- 【Hash一致性算法】什么是Hash一致性算法
目录 1. 一致性Hash算法简介 环形Hash空间 把数据通过一定的hash算法处理后映射到环上 将机器通过hash算法映射到环上 机器的删除与添加 平衡性 本文转载自博客 1. 一致性Hash算法 ...
- R3环申请内存时页面保护与_MMVAD_FLAGS.Protection位的对应关系
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 技术学习来源:火哥(QQ:471194425) R3环申请内存时页 ...
- 关于 Sublime Text 3 中 input 无法输入的问题
在新装的 Sublime Text 3 中,Ctrl + B 运行时会发现无法正常输入,我记录了一下我的解决方法. 相关原文可参照 https://blog.csdn.net/weixin_42116 ...
- C#函数的递归
using System; namespace ConsoleApp3 { class Program { static void Main(string[] args) { ); Console.W ...
- SQL Prompt提示和SQL默认智能提示冲突解决
- CodeForces - 1230C(思维/暴力)
题意 https://vjudge.net/problem/CodeForces-1230C 给了你总共有21张多米诺骨牌,每张牌有两个面,然后给你一个无向图,保证没有环和一个顶点多条边的情况存在.现 ...
- 【心得】Lattice EPC3 PCS使用经验
[博客导航] [导航]FPGA相关 一.目的 将使用过程中遇到的问题随时记录,共享经验心得. 二.心得随笔 1.仿真脚本 为避免生成PCS IP之后,仿真时忘记添加参数文件,可以在仿真脚本中添加以下代 ...