背景

  .net core Swashbuckle Swagger 官方文档:https://github.com/domaindrivendev/Swashbuckle.AspNetCore

我们发现很多小伙伴日常使用 Swashbuckle Swagger 都不看文档的,写下常需用到的配置/写法;

基本使用

Package Manager : Install-Package Swashbuckle.AspNetCore

记得用swagger一定要给action打[httpmehtod]标签

[HttpGet]
public IEnumerable<Product> SearchProducts([FromQuery]string keywords)
public static IServiceCollection AddSwagger(this IServiceCollection services)
{
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Version = "v1",
Title = "test api",
}); //多个xml文件
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
var dtoXmlPath = Path.Combine(AppContext.BaseDirectory, $"{typeof(BaseIdEntity).Assembly.GetName().Name}.xml");
c.IncludeXmlComments(xmlPath);
c.IncludeXmlComments(dtoXmlPath);
}); return services;
}

注意:这里要先启用xml生成

#在项目csproj文件里启用这个
<PropertyGroup>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
</PropertyGroup>

或者到 项目 -> 属性启用:

配置二级目录

public static IApplicationBuilder UseSwagger(this IApplicationBuilder app)
{
//配置二级目录
var basePath = "/testapi";
app.UseSwagger(c =>
{
c.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.Servers = new List<OpenApiServer> { new OpenApiServer { Url = $"{basePath}" } });
});
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint($"{ basePath}/swagger/v1/swagger.json", "FitnessApi V1");
}); return app;
}

多版本支持

services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API - V1", Version = "v1" });
c.SwaggerDoc("v2", new OpenApiInfo { Title = "My API - V2", Version = "v2" });
})
[HttpPost]
[ApiExplorerSettings(GroupName = "v2")]
public void Post([FromBody]Product product)

更完善的枚举支持

Install-Package Unchase.Swashbuckle.AspNetCore.Extensions
services.AddSwaggerGen(options =>
{
//... // or configured:
options.AddEnumsWithValuesFixFilters(services, o =>
{
// add schema filter to fix enums (add 'x-enumNames' for NSwag) in schema
o.ApplySchemaFilter = true; // add parameter filter to fix enums (add 'x-enumNames' for NSwag) in schema parameters
o.ApplyParameterFilter = true; // add document filter to fix enums displaying in swagger document
o.ApplyDocumentFilter = true; // add descriptions from DescriptionAttribute or xml-comments to fix enums (add 'x-enumDescriptions' for schema extensions) for applied filters
o.IncludeDescriptions = true; // add remarks for descriptions from xml-comments
o.IncludeXEnumRemarks = true; // get descriptions from DescriptionAttribute then from xml-comments
o.DescriptionSource = DescriptionSources.DescriptionAttributesThenXmlComments; // get descriptions from xml-file comments on the specified path
// should use "options.IncludeXmlComments(xmlFilePath);" before
o.IncludeXmlCommentsFrom(xmlFilePath);
// the same for another xml-files...
});
});

枚举文档效果

OAuth2.0支持

Install-Package Swashbuckle.AspNetCore.Filters

手填AccessToken(apikey)方式

 services.AddSwaggerGen(c =>
{
//... c.OperationFilter<SecurityRequirementsOperationFilter>();
c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
{
Description = "Standard Authorization header using the Bearer scheme. Example: \"bearer {token}\"",
In = ParameterLocation.Header,
Name = "Authorization",
Type = SecuritySchemeType.ApiKey
});
});

效果

引导跳转OAuth服务器方式

 services.AddSwaggerGen(c =>
{
//... c.OperationFilter<SecurityRequirementsOperationFilter>();
c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
{
Type = SecuritySchemeType.OAuth2,
Flows = new OpenApiOAuthFlows()
{
Implicit = new OpenApiOAuthFlow()
{
AuthorizationUrl = new Uri("https://your.identityserver.io/connect/authorize"),
Scopes = new Dictionary<string, string>
{
{ "testapi.rw", "授权访问测试TestApi" }
}
}
}
}); });
app.UseSwaggerUI(c =>
{
//...
c.OAuthClientId("test_swaager");
});

效果

忽略某个Api

[HttpGet("{id}")]
[ApiExplorerSettings(IgnoreApi = true)]
public Product GetById(int id)

修改传输数据类型

 services.AddSwaggerGen(c =>
{
//long类型转string
c.MapType<long>(() => new OpenApiSchema { Type = "string" });
});

自定义描述(标签)

Install-Package Swashbuckle.AspNetCore.Annotations
[SwaggerTag("Create, read, update and delete Products")]
public class ProductsController
{
...
}

Quer请求参数小驼峰

  public class QueryBillDto
{
/// <summary>
/// PID/手机号/昵称
/// </summary> public string Query { get; set; } /// <summary>
///
/// </summary>
public EApp? Appid { get; set; } /// <summary>
/// 收入/支出类型
/// </summary>
public EnumBillType? BillType { get; set; } /// <summary>
/// 账单起始日期
/// </summary>
public DateTime? BillBegin { get; set; } /// <summary>
/// 账单截止日期
/// </summary>
public DateTime? BillEnd { get; set; }
} ...
//比如定义了这样的接口
public async Task<IActionResult> GetBillList([FromQuery] QueryBillDto dto)
{
return Ok();
}

swagger-ui需要显示 为小写的这样:

 services.AddSwaggerGen(c =>
{
//参数描述小驼峰
o.DescribeAllParametersInCamelCase();
});

Asp.net core Swashbuckle Swagger 的常用配置的更多相关文章

  1. Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器

    前言: 本篇文章主要讲解的是如何在Linux CentOS7操作系统搭建.NET Core运行环境并发布ASP.NET Core应用程序,以及配置Nginx反向代理服务器.因为公司的项目一直都是托管在 ...

  2. ASP.NET Core应用程序的参数配置及使用(转载)

    本文结构 提前准备 参数配置方式 appsettings.json 环境变量 命令行参数 在控制器中使用配置参数 注入IConfiguration对象 注入IOptions对象 总结 应用程序的开发不 ...

  3. asp.net core 教程(五)-配置

    Asp.Net Core-配置 Asp.Net Core-配置 在这一章,我们将讨论 ASP.NET Core项目的相关的配置.在解决方案资源管理器中,您将看到 Startup.cs 文件.如果你有以 ...

  4. asp.net core重新加载应用配置

    asp.net core重新加载应用配置 Intro 我把配置放在了数据库或者是Redis里,配置需要修改的时候我要直接修改数据库,然后调用一个接口去重新加载应用配置,于是就尝试写一个运行时重新加载配 ...

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

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

  6. Asp.Net Core WebApi (Swagger+EF Core/Code First)

    Swagger简介: Swagger™的目标是为REST APIs 定义一个标准的,与语言无关的接口,使人和计算机在看不到源码或者看不到文档或者不能通过网络流量检测的情况下能发现和理解各种服务的功能. ...

  7. ASP.NET CORE API Swagger+IdentityServer4授权验证

    简介 本来不想写这篇博文,但在网上找到的文章博客都没有完整配置信息,所以这里记录下. 不了解IdentityServer4的可以看看我之前写的入门博文 Swagger 官方演示地址 源码地址 配置Id ...

  8. asp.net core 集成swagger ui

    什么是Swagger? 说swagger 之前,我们先说一下OpenApi 规范. OpenApi 是一种和语言无关的用于描述RESTAPIs 接口功能的一种规范,对RESTAPIs 接口的描述包括: ...

  9. ASP.NET Core 在 JSON 文件中配置依赖注入

    前言 在上一篇文章中写了如何在MVC中配置全局路由前缀,今天给大家介绍一下如何在在 json 文件中配置依赖注入. 在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等 ...

  10. Asp.net Core的Swagger接口根据模块、版本分组

    近期一直在学习Asp.net Core,微软的文档太难看,都是英文翻译过来的,很不友好,感谢这个博客,从壹开始前后端分离[ .NET Core2.0 +Vue2.0 ],让我入门了,刚学到这个Swag ...

随机推荐

  1. 一分钟部署 Llama3 中文大模型,没别的,就是快

    前段时间百度创始人李彦宏信誓旦旦地说开源大模型会越来越落后,闭源模型会持续领先.随后小扎同学就给了他当头一棒,向他展示了什么叫做顶级开源大模型. 美国当地时间4月18日,Meta 在官网上发布了两款开 ...

  2. 羽夏闲谈——解决 MSI 安装包指定账户已存在

    序   前几天用VS2022,升级到17.1.0版本,发现模板用不了了,但能正常打开之前用它创建的项目.我重装试图修复该问题,解决雪上加霜,报错如下: 未能安装包"Microsoft.Vis ...

  3. GOLANG-配置nginx反向代理端口 配置域名

    目录 配置/etc/nginx/nginx.conf文件 新建/etc/nginx/conf.d/doc.haimait.conf文件 重启nginx服务 解析自己的域名到服务器的公网ip 配置/et ...

  4. 《Modern C++ Design》之上篇

    如下内容是在看侯捷老师翻译的<Modern C++ Design>书籍时,整理的code和摘要,用于不断地温故知新. 第一章 1. 运用 Template Template 参数实作 Po ...

  5. Linux — 物理内存管理

    物理内存的组织方式 物理内存是由连续的一页一页的块组成,每个物理页都有页号 每个页由struct page表示,放进数组里--平坦内存模型 SMP和NUMA SMP中,总线会称为瓶颈,因为数据都要经过 ...

  6. ansible系列(29)--ansible的Jinja2语法及应用

    目录 1. Ansible Jinja2 1.1 jinja2语法结构 1.2 jinja2中{{ }}中的运算符 1.3 jinja2中for循环和if判断示例 1.4 Jinja2管理Nginx负 ...

  7. csapp-bomblab(自信满满版)

    反汇编bomb文件 要查看机器代码文件的内容,有一类称为反汇编器(disassembler,assembler是汇编程序,dis-加在某些词语前表示相反的意思)的程序非常有用.这些程序根据机器代码产生 ...

  8. three.js教程7-PBR材质与环境贴图CubeTextureLoader

    1.PBR材质 PBR是基于物理的渲染(physically-based rendering).模拟物体表面的反射算法. Three.js提供了两个PBR材质相关的类MeshStandardMater ...

  9. IPv6 — 路由方式

    目录 文章目录 目录 前文列表 IPv6 的路由 前文列表 <IPv6 - 网际协议第 6 版> <IPv6 - 地址格式与寻址模式> <IPv6 - 协议头> & ...

  10. 国产系统UOS安装体验

    原文链接 https://www.giantliu.cn/2020/09/04/200904InstallUOS/ UOS简介 统信桌面操作系统(Uniontech OS)个人正式版是统信软件基于Li ...