什么是 Swagger?

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。它提供了一种规范的方式来定义、构建和文档化 RESTful Web 服务,使客户端能够发现和理解各种服务的功能。Swagger 的目标是使部署管理和使用功能强大的 API 从未如此简单。

Swagger 提供了一种基于 YAML 或 JSON 格式的规范语言,用于描述 RESTful Web 服务的元数据,包括 API 的版本、资源、请求方法、参数、响应等信息。通过使用 Swagger 工具,开发人员可以生成 API 文档,并与可视化工具集成,提供了一个用户友好的界面来测试和使用 API。

此外,Swagger 还提供了一些额外的功能,如 API 的版本控制、认证和授权、API 的监控和度量等。这些功能可以帮助开发人员更好地管理和维护 RESTful Web 服务。

总之,Swagger 是一个强大的工具,可以帮助开发人员构建、文档化和使用 RESTful Web 服务,提高 API 的开发效率和管理水平。

什么是 Swashbuckle.AspNetCore?

Swashbuckle.AspNetCore 是一个开源的 .NET 包,用于为 ASP.NET Core Web API 生成美观的、交互式的 OpenAPI 文档(以前称为 Swagger)。它是一个强大的工具,可以帮助开发人员快速生成易于理解和使用的 API 文档。

官网:https://github.com/domaindrivendev/Swashbuckle.AspNetCore/blob/master/README.md

Asp .Net Core 如何集成 Swagger?

要在 ASP.NET Core 项目中集成 Swashbuckle.AspNetCore,可以按照以下步骤进行操作:

  1. 安装 Swashbuckle.AspNetCore NuGet 包:

在 Visual Studio 中打开你的 ASP.NET Core 项目,并通过 NuGet 包管理器安装 Swashbuckle.AspNetCore 包。

Install-Package Swashbuckle.AspNetCore
  1. 配置 Swashbuckle.AspNetCore:

    在 Startup.cs 文件的 ConfigureServices 方法中,注册 Swashbuckle 服务。
            builder.Services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new OpenApiInfo
{
Title = "订单服务",
Version = "v2",
Description = "订单服务描述",
Contact = new OpenApiContact
{
Name = "robin",
Email = "2545233857@qq.com"
},
License = new OpenApiLicense
{
Name = "MIT",
Url = new Uri("https://www.cnblogs.com/vic-tory")
},
}); // 设置排序
options.OrderActionsBy((apiDesc) => $"{apiDesc.ActionDescriptor.RouteValues["controller"]}_{apiDesc.HttpMethod}"); //设置
var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SwaggerDemo.xml"); options.IncludeXmlComments(filePath);
});

更改 Swagger JSON 端点的路径

默认情况下,Swagger JSON 将在以下路由中公开 - “/swagger/{documentName}/swagger.json”。如有必要,您可以在启用 Swagger 中间件时更改此设置。自定义路由必须包含该{documentName}参数。

app.UseSwagger(c =>
{
c.RouteTemplate = "api-docs/{documentName}/swagger.json";
});

注意:如果您使用 SwaggerUI 中间件,您还需要更新其配置以反映新端点:

app.UseSwaggerUI(c =>
{
c.RoutePrefix = "swagger"; //指定路由前缀
c.SwaggerEndpoint("/api-docs/v1/swagger.json", "order api v1");
})

包含 XML 注释中的描述

为了通过人性化的描述来增强生成的文档,您可以使用 Xml 注释来注释控制器操作和模型,并配置 Swashbuckle 将这些注释合并到输出的 Swagger JSON 中:

打开项目的“属性”对话框,单击“构建”选项卡并确保选中“XML 文档文件”,或者将true元素添加到.csproj 项目文件的部分。这将在构建时生成一个包含所有 XML 注释的文件。

此时,任何未使用 XML 注释进行注释的类或方法都将触发构建警告。要抑制这种情况,请在属性对话框的“抑制警告”字段中输入警告代码“1591”,或添加1591到.csproj 项目文件的部分。

配置 Swashbuckle 将文件上的 XML 注释合并到生成的 Swagger JSON 中:

                var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SwaggerDemo.xml");

                options.IncludeXmlComments(filePath);

方法上

        /// <summary>
/// 获取天气
/// </summary>
/// <param name="param">参数</param>
/// <returns>返回一个天气集合</returns>
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get(string param)
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}

添加 Jwt 验证

                options.AddSecurityDefinition("bearerAuth", new OpenApiSecurityScheme
{
Type = SecuritySchemeType.Http,
Scheme = "bearer",
BearerFormat = "JWT",
Description = "请输入Jwt 字符串"
}); options.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "bearerAuth" }
},
new string[] {}
}
});

第三方包

Package Description
Swashbuckle.AspNetCore.Filters Some useful Swashbuckle filters which add additional documentation, e.g. request and response examples, authorization information, etc. See its Readme for more details
Unchase.Swashbuckle.AspNetCore.Extensions Some useful extensions (filters), which add additional documentation, e.g. hide PathItems for unaccepted roles, fix enums for client code generation, etc. See its Readme for more details
MicroElements.Swashbuckle.FluentValidation Use FluentValidation rules instead of ComponentModel attributes to augment generated Swagger Schemas
MMLib.SwaggerForOcelot Aggregate documentations over microservices directly on Ocelot API Gateway

封装 Swagger 扩展

SwaggerServiceExtensions

    /// <summary>
/// Swagger 服务扩展
/// </summary>
public static class SwaggerServiceExtensions
{
/// <summary>
/// 添加 Swagger 服务
/// </summary>
/// <param name="services"></param>
/// <param name="swaggerOptions"></param>
/// <returns></returns>
public static IServiceCollection AddMCodeSwagger(this IServiceCollection services, SwaggerOptions swaggerOptions)
{
services.AddSingleton(swaggerOptions); SwaggerGenServiceCollectionExtensions.AddSwaggerGen(services, c =>
{
c.SwaggerDoc(swaggerOptions.ServiceName, swaggerOptions.ApiInfo); if (swaggerOptions.XmlCommentFiles != null)
{
foreach (string xmlCommentFile in swaggerOptions.XmlCommentFiles)
{
string str = Path.Combine(AppContext.BaseDirectory, xmlCommentFile);
if (File.Exists(str)) c.IncludeXmlComments(str, true);
}
} SwaggerGenOptionsExtensions.CustomSchemaIds(c, x => x.FullName); c.AddSecurityDefinition("bearerAuth", new OpenApiSecurityScheme
{
Type = SecuritySchemeType.Http,
Scheme = "bearer",
BearerFormat = "JWT",
Description = "请输入 bearer 认证"
}); c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "bearerAuth" }
},
new string[] {}
}
});
}); return services;
} /// <summary>
/// 使用 Swagger UI
/// </summary>
/// <param name="app"></param>
/// <returns></returns>
public static IApplicationBuilder UseMCodeSwagger(this IApplicationBuilder app)
{
string serviceName = app.ApplicationServices.GetRequiredService<SwaggerOptions>().ServiceName; SwaggerUIBuilderExtensions.UseSwaggerUI(SwaggerBuilderExtensions.UseSwagger(app), c =>
{
c.SwaggerEndpoint("/swagger/" + serviceName + "/swagger.json", "api." + serviceName);
});
return app;
}
}

SwaggerOptions

    /// <summary>
/// Swagger配置
/// </summary>
public class SwaggerOptions
{
/// <summary>
/// 服务名称
/// </summary>
public string ServiceName { get; set; } /// <summary>
/// API信息
/// </summary>
public OpenApiInfo ApiInfo { get; set; } /// <summary>
/// Xml注释文件
/// </summary>
public string[] XmlCommentFiles { get; set; } /// <summary>
/// 构造函数
/// </summary>
/// <param name="serviceName">服务名称</param>
/// <param name="apiInfo">API信息</param>
/// <param name="xmlCommentFiles">Xml注释文件</param>
public SwaggerOptions(string serviceName, OpenApiInfo apiInfo, string[] xmlCommentFiles = null)
{
ServiceName = !string.IsNullOrWhiteSpace(serviceName) ? serviceName : throw new ArgumentException("serviceName parameter not config.");
ApiInfo = apiInfo;
XmlCommentFiles = xmlCommentFiles;
}
}

Asp .Net Core 系列:基于 Swashbuckle.AspNetCore 包 集成 Swagger的更多相关文章

  1. 技术的正宗与野路子 c#, AOP动态代理实现动态权限控制(一) 探索基于.NET下实现一句话木马之asmx篇 asp.net core 系列 9 环境(Development、Staging 、Production)

    黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙. 这段描写出自<倚天屠龙记>第三十八回. “九阴神抓”本是& ...

  2. 【目录】asp.net core系列篇

    随笔分类 - asp.net core系列篇 asp.net core系列 68 Filter管道过滤器 摘要: 一.概述 本篇详细了解一下asp.net core filters,filter叫&q ...

  3. asp.net core系列 30 EF管理数据库架构--必备知识 迁移

    一.管理数据库架构概述 EF Core 提供两种主要方法来保持 EF Core 模型和数据库架构同步.一是以 EF Core 模型为基准,二是以数据库为基准. (1)如果希望以 EF Core 模型为 ...

  4. asp.net core系列 37 WebAPI 使用OpenAPI (swagger)中间件

    一.概述 在使用Web API时,对于开发人员来说,了解其各种方法可能是一项挑战.在ASP.NET Core上,Web api 辅助工具介绍二个中间件,包括:Swashbuckle和NSwag .NE ...

  5. asp.net core系列 31 EF管理数据库架构--必备知识 反向工程

    一.   反向工程 反向工程是基于数据库架构,生成的实体类和DbContext类代码的过程,对于Visual Studio开发,建议使用PMC.对于其他开发环境,请选择.NET Core CLI工具( ...

  6. asp.net core系列 39 Web 应用Razor 介绍与详细示例

    一. Razor介绍 在使用ASP.NET Core Web开发时, ASP.NET Core MVC 提供了一个新特性Razor. 这样开发Web包括了MVC框架和Razor框架.对于Razor来说 ...

  7. asp.net core 系列 22 EF(连接字符串,连接复原,DbContext)

    一.连接字符串 在上二篇中,ASP.NET Core 应用程序连接字符串是写死在ConfigureServices代码中,下面介绍通过配置来实现.连接字符串可以存储在 appsettings.json ...

  8. asp.net core 系列 18 web服务器实现

    一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...

  9. asp.net core 系列 17 通用主机 IHostBuilder

    一.概述 ASP.NET Core 通用主机 (HostBuilder),该主机对于托管不处理 HTTP 请求的应用非常有用.通用主机的目标是将 HTTP 管道从 Web 主机 API 中分离出来,从 ...

  10. asp.net core系列 39 Razor 介绍与详细示例

    原文:asp.net core系列 39 Razor 介绍与详细示例 一. Razor介绍 在使用ASP.NET Core Web开发时, ASP.NET Core MVC 提供了一个新特性Razor ...

随机推荐

  1. The method dismissDialog(int) from the type Activity is deprecated

    The method showDialog(int) from the type Activity is deprecated in android?   up vote6down votefavor ...

  2. MongoDB数据的导出导入及日志分析

    一.远程连接导出报错超时 mongodump -h 10.110.63.150:27017 -u'admin' -p'passwd!' --authenticationDatabase flowtes ...

  3. 11G手动建库

    ◆◆◆11G手动建库◆设置环境变量export ORACLE_BASE=/u01/app/oracleexport ORACLE_HOME=/u01/app/oracle/product/11.2.4 ...

  4. Python - 中文文本进行余弦相似度比较

    今天,在看论文的时候,突然想到了一件事情,爱是相对的,是双方的事情.那么"你爱我"和"你爱我"的相似度是多少呢?采用余弦相似度的方式来进行相似度比较.首先&qu ...

  5. HCTF 2023 wp

    HCTF 2023 wp 一.Misc 1.玩原神玩的 分析:附件为一张图片 观察最后一行,明显有flag的格式 搜索得知是 对照得flag为:hctf{yuanlainiyewanyuanshenh ...

  6. calico网络异常,不健康

    解决calico/node is not ready: BIRD is not ready: BGP not established withxxx calico有一个没有ready,查了一下是没有发 ...

  7. 2023江苏省领航杯(部分CRYPTO题目复现)

    决赛 回文 1.题目信息 =QfzEDO4YDNlBzN4gzN0YGM1QzYyUGZ3QDZzgDM7V2Sn52bI52Q= 2.解题方法 base64解码,两种思路: 要么是去掉前面=号解码 ...

  8. http协议与apache

    http协议与apache 1.httpd协议 两台主机通信需要socket文件  yum insatll -y nc  ​  [root@localhost ~]#nc -l 8000  #主机1 ...

  9. STM32CUBEIDE 如何将变量定义到指定内存地址

    使用场景如下: 我需要将bootloader/APP的版本号和一些字段信息定义到指定FLASH地址. 在STM32CubeIDE中的方法: 截止当前STM32CubeIDE还没有提供图形化的针对FLA ...

  10. L2-028 秀恩爱分得快

    90行,调了俩小时,大约有以下坑点. 1.每个数字都可能正负出现,比如-0 0,-1 1,一开始以为一个数的正负只会出现一个. 2.当俩人都不出现在照片中,那么输出俩人就行 3.当其中一个人不在照片里 ...