asp.net core使用Swashbuckle.AspNetCore(swagger)生成接口文档
asp.net core中使用Swashbuckle.AspNetCore生成接口文档
Swashbuckle.AspNetCore:swagger的asp.net core实现,本文使用版本为v1.1.0
项目地址:https://github.com/domaindrivendev/Swashbuckle.AspNetCore
仔细看了下readme,发现在百度找半天的东西其实readme里面就有...
开局一张图,然后开始编,一些基本的asp.net core东西就不再赘述,本文只对Swashbuckle.AspNetCore
的几个使用要点进行描述。
如上图所示,包含功能如下(完整示例见文末)
- 基础使用,添加controler的说明(
IDocumentFilter
) - 汉化操作按钮
- 添加通用参数(header)-实现
IOperationFilter
- 多版本控制(暂时见demo)
- 使用JWT的简单接口验证(暂时见demo)
构建一个webapi项目并使用swagger
- 新建asp.net core webapi项目
dotnet new webapi
- 安装nuget包:
Swashbuckle.AspNetCore
,本文使用版本1.1.0,.net core版本2.0+ - 编辑解决方案添加(或者在vs中项目属性->生成->勾选生成xml文档文件)如下配置片段
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DocumentationFile>bin\Debug\netcoreapp2.0\项目名称.xml</DocumentationFile>
</PropertyGroup>
- 使用Swagger并注入汉化脚本
c.SwaggerDoc
配置接口描述信息
c.OperationFilter
可通过IOperationFilter
接口去添加一些公共的参数
c.DocumentFilter
通过IDocumentFilter
接口去生成控制器的标签(描述)
注:ConfigureServices
的方法返回值修改了,为了能够正常的使用ServiceLocator
获取服务
private const string _Project_Name = "AspNetCoreSwaggerDemo";//nameof(AspNetCoreSwaggerDemo);
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton(new ApiTokenConfig("A3FFB16D-D2C0-4F25-BACE-1B9E5AB614A6"));
services.AddScoped<IApiTokenService, ApiTokenService>();
services.AddSwaggerGen(c =>
{
typeof(ApiVersions).GetEnumNames().ToList().ForEach(version =>
{
c.SwaggerDoc(version, new Swashbuckle.AspNetCore.Swagger.Info
{
Version = version,
Title = $"{_Project_Name} 接口文档",
Description = $"{_Project_Name} HTTP API " + version,
TermsOfService = "None"
});
});
var basePath = Microsoft.Extensions.PlatformAbstractions.PlatformServices.Default.Application.ApplicationBasePath;
var xmlPath = System.IO.Path.Combine(basePath, $"{_Project_Name}.xml");
c.IncludeXmlComments(xmlPath);
//添加自定义参数,可通过一些特性标记去判断是否添加
c.OperationFilter<AssignOperationVendorExtensions>();
//添加对控制器的标签(描述)
c.DocumentFilter<ApplyTagDescriptions>();
});
services.AddMvc();
return services.BuildServiceProvider();
}
使用
InjectOnCompleteJavaScript
注入汉化js脚本即可
注:我在这个汉化脚本中添加了保存和读取赋值token/版本的js代码
ApiVersions
为枚举,配置api版本,以期通过CustomRoute
特性标记解决历史api问题。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSwagger();
app.UseSwaggerUI(c =>
{
//ApiVersions为自定义的版本枚举
typeof(ApiVersions)
.GetEnumNames()
.OrderByDescending(e => e)
.ToList()
.ForEach(version =>
{
//版本控制
c.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"{_Project_Name} {version}");
});
//注入汉化脚本
c.InjectOnCompleteJavaScript($"/swagger_translator.js");
});
//通过ServiceLocator.Resolve<Service接口>()获取注入的服务
ServiceLocator.Configure(app.ApplicationServices);
app.UseStaticFiles();
app.UseMvc();
}
实现 IDocumentFilter
及 IOperationFilter
通过
IOperationFilter
接口可以添加一些公共的参数,添加参数到header或者上传图片等
通过IDocumentFilter
接口可以生成控制器的标签(描述)
调用方式分别为:
c.OperationFilter<AssignOperationVendorExtensions>();
c.DocumentFilter<ApplyTagDescriptions>();
//添加标签
public class ApplyTagDescriptions : IDocumentFilter
{
public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)
{
swaggerDoc.Tags = new List<Tag>
{
//添加对应的控制器描述 这个是好不容易在issues里面翻到的
new Tag { Name = "Account", Description = "登录相关接口" },
new Tag { Name = "UserCenter", Description = "用户中心接}
};
}
}
//添加通用参数,若in='header'则添加到header中,默认query参数
public class AssignOperationVendorExtensions : IOperationFilter
{
public void Apply(Operation operation, OperationFilterContext context)
{
operation.Parameters = operation.Parameters ?? new List<IParameter>();
//MemberAuthorizeAttribute 自定义的身份验证特性标记
var isAuthor = operation != null && context != null && context.ApiDescription.ControllerAttributes().Any(e => e.GetType() == typeof(MemberAuthorizeAttribute)) || context.ApiDescription.ActionAttributes().Any(e => e.GetType() == typeof(MemberAuthorizeAttribute));
if (isAuthor)
{
//in query header
operation.Parameters.Add(new NonBodyParameter() {
Name = "x-token",
In = "header", //query formData ..
Description = "身份验证票据",
Required = false,
Type = "string"
});
}
}
}
配置完成后,给Controler,Action添加上注释和请求类型就可以访问/swagger查看你的api文档了~
注:
- action方法或者控制器(或者继承的)必须有一个包含
[Route]
特性标记 - action方法必须添加请求类型
[HttpGet]/[HttpPost]/..
如何自动将token保存并赋值
使用js生成了文本框到
.authorize-wrapper
,将值保存到了本地存储中,然后会根据接口版本将版本号参数进行复制
$(function () {
//汉化
window.SwaggerTranslator.translate();
/***************下面是添加的token相关代码*******************/
window.saveToken=function() {
var test_token = $("#customtoken").val();
localStorage.setItem("test_x_token", $("#customtoken").val());
$("input[name='X-Token']").val(test_token)
}
//token保存
var test_token = localStorage.getItem("test_x_token")||"";
$(".authorize-wrapper").append("X-Token:<input type='text' id='customtoken' value='" + test_token +"' style='width:50%' /> <button onClick='saveToken()'>保存</button>")
$("input[name='X-Token']").val(test_token)
$("input[name='X-Version']").val(swaggerUi.api.info.version)
});
如何忽略一个接口
为Controller或者Action方法上添加特性标记[ApiExplorerSettings(IgnoreApi =true)]
即可
下一篇:Swashbuckle.AspNetCore3.0的二次封装与使用
文章完整示例
注:Demo 未修改默认启动路径,故应使用 /swagger/
访问文档:,也可自行修改 /Properties/launchSettings.json
配置默认路径
asp.net core使用Swashbuckle.AspNetCore(swagger)生成接口文档的更多相关文章
- ASP.NET Core 3.1使用Swagger API接口文档
Swagger是最流行的API开发工具,它遵循了OpenAPI规范,可以根据API接口自动生成在线文档,这样就可以解决文档更新不及时的问题.它可以贯穿于整个API生态,比如API的设计.编写API文档 ...
- asp.net core 使用 swagger 生成接口文档
参考地址:http://www.cnblogs.com/daxnet/p/6181366.html http://www.jianshu.com/p/fa5a9b76f3ed 微软参考文档:https ...
- Asp.Net Core Web Api 使用 Swagger 生成 api 说明文档
最近使用 Asp.Net Core Web Api 开发项目服务端.Swagger 是最受欢迎的 REST APIs 文档生成工具之一,进入我的视野.以下为学习应用情况的整理. 一.Swagger 介 ...
- .net core 使用 swagger 生成接口文档
微软参考文档:https://docs.microsoft.com/en-us/aspnet/core/tutorials/web-api-help-pages-using-swagger?tabs= ...
- webapi 利用webapiHelp和swagger生成接口文档
webapi 利用webapiHelp和swagger生成接口文档.均依赖xml(需允许项目生成注释xml) webapiHelp:微软技术自带,仅含有模块.方法.请求-相应参数的注释. swagge ...
- Django使用swagger生成接口文档
参考博客:Django接入Swagger,生成Swagger接口文档-操作解析 Swagger是一个规范和完整的框架,用于生成.描述.调用和可视化RESTful风格的Web服务.总体目标是使客户端和文 ...
- Go语言使用swagger生成接口文档
swagger介绍 Swagger本质上是一种用于描述使用JSON表示的RESTful API的接口描述语言.Swagger与一组开源软件工具一起使用,以设计.构建.记录和使用RESTful Web服 ...
- C# Swagger 生成接口文档
一直听说Swagger是做Web API文档的好工具,这次手里暂时没什么事,类体验下它的强大之处.下面是使用Swashbuckle.net 给asp.net web API添加文档的简要步骤. 参考地 ...
- WebAPI使用Swagger生成接口文档
开发工具:VS2017 版本15.7.1 新建项目,选择空模板,下面只勾选WebAPI 配置Web.config <system.webServer> 节点改为 <system.we ...
随机推荐
- CentOS 7 学习(二) 配置Nginx反向代理
CentOS 7 学习(二) 配置Nginx反向代理 Nginx可以通过php-fpm来运行PHP程序,也可以转向apache,让apache调用php程序来运行. 不过对于Nginx来说,其反向代理 ...
- 商城项目整理(三)JDBC增删改查
商品表的增加,修改,删除,订单表的增加,确认,用户表的查看,日志表的增加,查看 商品表建表语句: create table TEST.GOODS_TABLE ( gid NUMBER not null ...
- 使用puppet
首先配置一个默认文件 只是首次创建的时候才需要重启,后期不需要重启! [root@master manifests]# vim /etc/puppet/manifests/site.pp node d ...
- button的用法
C# 如何去掉button按钮的边框线? 设置FlatStyle为Flat,并且设置FlatAppearance下的BorderSize为0.
- Vuejs环境安装与工程建立【小白Windows向】
不知道为什么CDN的方式就是困难...大佬说SPA必须配置本地开发环境,那就配咯. 所以就准备了以下的工具进行安装本地开发环境: 1. 代码编辑器×1[本人使用VSCode 1.11] 2. Node ...
- 【ASP.NET MVC系列】浅谈NuGet在VS中的运用
一 概述 在我们讲解NuGet前,我们先来看看一个例子. 1.例子: 假设现在开发一套系统,其中前端框架我们选择Bootstrap,由于选择Bootstrap作为前端框架,因此,在项目中,我们 ...
- jQuery 文档操作方法
jQuery 文档操作方法 这些方法对于 XML 文档和 HTML 文档均是适用的,除了:html(). 方法 描述 addClass() 向匹配的元素添加指定的类名. after() 在匹配的元素之 ...
- springBoot系列教程08:拦截器(Interceptor)的使用
拦截器intercprot 和 过滤器 Filter 其实作用类似 在最开始接触java 使用struts2的时候,里面都是filter 后来springmvc时就用interceptor 没太在意 ...
- 【转】搭建spark环境 单机版
本文将介绍Apache Spark 1.6.0在单机的部署,与在集群中部署的步骤基本一致,只是少了一些master和slave文件的配置.直接安装scala与Spark就可以在单机使用,但如果用到hd ...
- Vuex 源码学习(二)
Vue加载后,将Vuex 加载到 Vue对象上后,初始化Store. (一) Store的参数的定义 其中 action 与 mutation 的订阅者 用 数组存储,而其属性都是用对象存储的. 考虑 ...