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的几个使用要点进行描述。



如上图所示,包含功能如下(完整示例见文末)

  1. 基础使用,添加controler的说明(IDocumentFilter)
  2. 汉化操作按钮
  3. 添加通用参数(header)-实现IOperationFilter
  4. 多版本控制(暂时见demo)
  5. 使用JWT的简单接口验证(暂时见demo)

构建一个webapi项目并使用swagger

  1. 新建asp.net core webapi项目 dotnet new webapi
  2. 安装nuget包:Swashbuckle.AspNetCore,本文使用版本1.1.0,.net core版本2.0+
  3. 编辑解决方案添加(或者在vs中项目属性->生成->勾选生成xml文档文件)如下配置片段
      <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DocumentationFile>bin\Debug\netcoreapp2.0\项目名称.xml</DocumentationFile>
</PropertyGroup>
  1. 使用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();
}

实现 IDocumentFilterIOperationFilter

通过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文档了~

注:

  1. action方法或者控制器(或者继承的)必须有一个包含[Route]特性标记
  2. 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仓库地址

注:Demo 未修改默认启动路径,故应使用 /swagger/ 访问文档:,也可自行修改 /Properties/launchSettings.json 配置默认路径

asp.net core使用Swashbuckle.AspNetCore(swagger)生成接口文档的更多相关文章

  1. ASP.NET Core 3.1使用Swagger API接口文档

    Swagger是最流行的API开发工具,它遵循了OpenAPI规范,可以根据API接口自动生成在线文档,这样就可以解决文档更新不及时的问题.它可以贯穿于整个API生态,比如API的设计.编写API文档 ...

  2. asp.net core 使用 swagger 生成接口文档

    参考地址:http://www.cnblogs.com/daxnet/p/6181366.html http://www.jianshu.com/p/fa5a9b76f3ed 微软参考文档:https ...

  3. Asp.Net Core Web Api 使用 Swagger 生成 api 说明文档

    最近使用 Asp.Net Core Web Api 开发项目服务端.Swagger 是最受欢迎的 REST APIs 文档生成工具之一,进入我的视野.以下为学习应用情况的整理. 一.Swagger 介 ...

  4. .net core 使用 swagger 生成接口文档

    微软参考文档:https://docs.microsoft.com/en-us/aspnet/core/tutorials/web-api-help-pages-using-swagger?tabs= ...

  5. webapi 利用webapiHelp和swagger生成接口文档

    webapi 利用webapiHelp和swagger生成接口文档.均依赖xml(需允许项目生成注释xml) webapiHelp:微软技术自带,仅含有模块.方法.请求-相应参数的注释. swagge ...

  6. Django使用swagger生成接口文档

    参考博客:Django接入Swagger,生成Swagger接口文档-操作解析 Swagger是一个规范和完整的框架,用于生成.描述.调用和可视化RESTful风格的Web服务.总体目标是使客户端和文 ...

  7. Go语言使用swagger生成接口文档

    swagger介绍 Swagger本质上是一种用于描述使用JSON表示的RESTful API的接口描述语言.Swagger与一组开源软件工具一起使用,以设计.构建.记录和使用RESTful Web服 ...

  8. C# Swagger 生成接口文档

    一直听说Swagger是做Web API文档的好工具,这次手里暂时没什么事,类体验下它的强大之处.下面是使用Swashbuckle.net 给asp.net web API添加文档的简要步骤. 参考地 ...

  9. WebAPI使用Swagger生成接口文档

    开发工具:VS2017 版本15.7.1 新建项目,选择空模板,下面只勾选WebAPI 配置Web.config <system.webServer> 节点改为 <system.we ...

随机推荐

  1. 60、jQuery其余操作

    上篇主要介绍了jQuery,和一些基本用法,这篇主要讲解动画.常用事件.还有一些jQuery的补充内容. 本篇导航: 动画 常用事件 插件 jQuery API 中文文档 一.动画 1.基本 show ...

  2. 利用aop插入异常日志的2种方式

    AOP是面向切面编程,利用这个技术可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各个部分的耦合性降低,提高代码的可重用性,同时提高开发效率(来自百度百科). Spring AOP有两种实现方式,一 ...

  3. [置顶] xamarin android 布局尺寸了解

    为了使UI界面在不同大小的移动端显示器上能够正常显示,大家可能都知道使用sp作为字体大小的单位,dp作为其他元素长度的单位. 前几天看了一篇文章关于 App设计规范的,文章用心写的非常好,这里是链接  ...

  4. css各种布局

    1.水平居中 前提:父容器.parent 和子容器.child 1)使用text-align和inline-block .parent{text-aling:center}; .child {disp ...

  5. KVM(二):KVM应用

    ++++++++++++++++++++++++++++++创建和拍摄快照++++++++++++++++++++++++++++++++++ KVM快照方法常用的是qemu-img snapshot ...

  6. CentOS7 nginx安装

    1 nginx安装环境 nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境. n gcc 安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没 ...

  7. find 命令的误差估值与单位调整

    一.命令简介 find 命令的 -size 参数 单位b(不是byte而是block).c.w.k.M.G.默认是单位b ,也就是1block = 512byte = 0.5kb (文件系统ext4) ...

  8. Golang 网络爬虫框架gocolly/colly 三

    Golang 网络爬虫框架gocolly/colly 三 熟悉了<Golang 网络爬虫框架gocolly/colly一>和<Golang 网络爬虫框架gocolly/colly二& ...

  9. Linux发行版 CentOS6.5下的分区操作

    本文地址http://comexchan.cnblogs.com/ ,尊重知识产权,转载请注明出处,谢谢! 查询磁盘信息并作分区规划 执行下述命令查询磁盘信息: fdisk -l 可知.数据盘大小50 ...

  10. 自动化测试辅助工具(Selenium IDE等)

    本随表目录 Selenium IDE安装和使用 FireBug安装和使用 FirePath安装和使用   Selenium IDE安装 方式一:打开Firefox-->添加组件-->搜索出 ...