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


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

  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();
}

实现 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文档了~
注:

  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仓库地址

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

原文地址:https://www.cnblogs.com/webenh/p/11577748.html

时间: 2024-08-08 05:44:51

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

用Swagger生成接口文档

Swagger简介 在系统设计的时候,各个应用之间往往是通过接口进行交互的.因此接口的定义在整个团队中就变得尤为重要.我们可以把接口的规范用接口描述语言进行描述,然后Swagger可以根据我们定义的接口规范生成对应的接口文档.它生成的接口文档提供了接口测试功能.我们只需要填上对应的参数,然后点击调用,就可以完成一次接口测试,非常方便.就像下图展示的那样. 不仅如此,Swagger还能够根据接口规范自动生成对应的接口代码!比如Java客户端代码.Java服务端代码等.这个东西减少了接口规范的沟通成

swagger生成接口文档和map类型参数解析

一:swagger是什么? 1.是一款让你更好的书写API文档的规范且完整框架.2.提供描述.生产.消费和可视化RESTful Web Service.3.是由庞大工具集合支撑的形式化规范.这个集合涵盖了从终端用户接口.底层代码库到商业API管理的方方面面. 方法一:使用第三方依赖(最简单的方法) 1.在pom.xml文件中添加第三方swagger依赖() <dependency> <groupId>com.spring4all</groupId> <artifa

Asp Net Core Swagger自动生成接口文档

Swagger是什么 Swagger工具为你的Asp Net Core生成漂亮的API文档.目前社会上大部分都是一个服务端为N个客户端提供接口,往往我们需要提供一个友好的API文档,Swagger的出现,几乎使得API文档完全自动化. 开始使用Swagger 此处我们使用开发IDE为VsCode,输入dotnet new webapi -o SwaggerDemo 创建ASP.NET Core Web API项目 添加Swashbuckle.AspNetCore包(此处不讨论包的安装方法,请自行

Asp.Net Core下使用swagger生成api文档

目录 一.前期准备 二.配置Swagger 三.参考 .Net Core中有两个集成NSwag的包,分别为Swashbuckle和NSwag.两者的配置大同小异.这里以NSwag为例. 一.前期准备 1.初始化asp.net core 测试项目 新建asp.net core项目,此处略过: 新建apicontroller,并编写测试代码: [Route("api/[controller]")] [ApiController] public class UserApiController

ASP.NET WebAPI使用Swagger生成测试文档

ASP.NET WebAPI使用Swagger生成测试文档 SwaggerUI是一个简单的Restful API测试和文档工具.简单.漂亮.易用(官方demo).通过读取JSON配置显示API .项目本身仅仅也只依赖一些html,css,js静态文件.你可以几乎放在任何Web容器上使用 捣鼓了好久最终效果如下 1.API控制器和action描述 2.测试接口 使用swagger 1.创建webapi项目解决方案 2.引用swagger nuget包 swashbuckle和swagger.NET

浅析如何在Nancy中使用Swagger生成API文档

原文:浅析如何在Nancy中使用Swagger生成API文档 前言 上一篇博客介绍了使用Nancy框架内部的方法来创建了一个简单到不能再简单的Document.但是还有许许多多的不足. 为了能稍微完善一下这个Document,这篇引用了当前流行的Swagger,以及另一个开源的Nancy.Swagger项目来完成今天的任务! 注:Swagger是已经相对成熟的了,但Nancy(2.0.0-clinteastwood)和Nancy.Swagger(2.2.6-alpha)是基于目前的最新版本,但目

PCB DotNetCore Swagger生成WebAPI文档配置方法

在.net framework框架下可以使用WebApiTestClientWebApi生成WebAPI接口文档与方便接口测试用,而在DotnetCore却没有找到这个工具了,baidu查找一下发现有一个相类似的工具,它就是Swagger,和使用WebApiTestClientWebApi差不多的,这里Swagger配置过程整理如下:   一.下载Swashbuckle.AspNetCore NuGet下载安装Swashbuckle.AspNetCore   二.Startup.cs代码修改 1

转:Swagger2自动生成接口文档和Mock模拟数据

转自:https://www.cnblogs.com/vipstone/p/9841716.html 一.简介 在当下这个前后端分离的技术趋势下,前端工程师过度依赖后端工程师的接口和数据,给开发带来了两大问题: 问题一.后端接口查看难:要怎么调用?参数怎么传递?有几个参数?参数都代表什么含义? 问题二.返回数据操作难:数据返回不对或者不够怎么办?怎么才能灵活的操作数据? 这是很多公司前后端分离之后带来的困扰,那怎么来解决这些问题? 问题一的一般解决方案:后端团队共同维护一个在线文档,每次改接口再

利用ApiPost一键、快速生成接口文档!女猿也过38节!

对于我们这些程序员和程序媛来讲,最头疼的莫过于写文档. 我们可都是正个八经的理工校草和理工女神,研究github.逛逛csdn.写hello world是才我们的拿手菜,写文档是文科生的事情好不啦?(手动吐哇吐) 今天,教大家一个妙招:利用ApiPost一键.快速生成接口文档! 妈妈再也不用担心自己女孩纸们没有时间过38节啦! 当女程序媛遇到问题,那就不是问题 ApiPost简介: ApiPost是一个支持团队协作,并可直接生成文档的API调试.管理工具.它支持模拟POST.GET.PUT等常见