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 ...
随机推荐
- [译]Vulkan教程(10)交换链
[译]Vulkan教程(10)交换链 Vulkan does not have the concept of a "default framebuffer", hence it r ...
- Navicat Premium连接mongodb基本使用和介绍
Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具, 它可以让你以单一程式同时连线到 MySQL.SQLite.Oracle 及 PostgreSQL,mongodb ...
- Java题库——Chapter6 一维数组
1)What is the representation of the third element in an array called a? 1) _______ A)a(3) B) a(2) C) ...
- ES6新语法(二)
1.解构 在ES6中,可以使用解构从数组和对象提取值并赋值给独特的变量,即将数组或对象中的值,拆成一个一个变量. 解构:自动解析数组或对象中的值,并赋值给指定的变量.. ...
- 面试题:python 中 staticmethod 和 classmethod有什么区别
面试中经常会问到staticmethod 和 classmethod有什么区别? 首先看下官方的解释: staticmethod: class staticmethod staticmethod(fu ...
- PostgreSQL 常用函数
类似Oracle ,PostgreSQL也有强大的类型转换函数, 下面仅举两个类型转换例子. --1 例子 postgres; ?column? ---------- ( row) 在PG里如果想做除 ...
- Dynamics CRM 2015/2016新特性之三十四:有了插件日志,调试插件so easy!
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复217或者20160330可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- angularjs $http请求网络数据并展示
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Linxu:在Linux下访问Windows的共享目录
在 Windows xp 上设置一个共享目录 共享目录:d:\myfiles 在 Linux 下安装 samba-client 客户端 yum install samba-client 安装 cifs ...
- The Preliminary Contest for ICPC Asia Shanghai 2019
传送门 B. Light bulbs 题意: 起初\(n\)个位置状态为\(0\),\(m\)次操作,每次操作更换区间状态:\(0\)到\(1\),\(1\)到\(0\). 共有\(T,T\leq 1 ...