什么是 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. Matlab 设计仿真CIC滤波器

    2023.09.26 使用CIC滤波器用于降采样.同样的,CIC滤波器也适用于升采样. 参考连接: [1] Matlab中CIC滤波器的应用_dsp.cicdecimator_张海军2013的博客-C ...

  2. 可观测性数据收集集大成者 Vector 介绍

    如果企业提供 IT 在线服务,那么可观测性能力是必不可少的."可观测性" 这个词近来也越发火爆,不懂 "可观测性" 都不好意思出门了.但是可观测性能力的构建却着 ...

  3. 再学Blazor——扩展方法

    上篇提到 Blazor 组件的高级写法,是采用扩展方法对 HTML 元素和组件进行扩展,以便于书写组件结构和代码阅读.本篇主要介绍扩展方法实现的思路. 什么是扩展方法 要扩展哪个类 扩展方法的实现 1 ...

  4. Hugging Face 分词器新增聊天模板属性

    一个幽灵,格式不正确的幽灵,在聊天模型中游荡! 太长不看版 现存的聊天模型使用的训练数据格式各各不同,我们需要用这些格式将对话转换为单个字符串并传给分词器.如果我们在微调或推理时使用的格式与模型训练时 ...

  5. 14. 从零开始编写一个wmproxy(代理,内网穿透等), HTTP文件服务器的实现过程及参数

    用Rust手把手编写一个wmproxy(代理,内网穿透等), HTTP中的压缩gzip,deflate,brotli算法 项目 ++wmproxy++ gite: https://gitee.com/ ...

  6. k8s-单节点升级为集群(高可用)

    单master节点升级为高可用集群 对于生产环境来说,单节点master风险太大了. 非常有必要做一个高可用的集群,这里的高可用主要是针对控制面板来说的,比如 kube-apiserver.etcd. ...

  7. k8s zookeeper安装(集群版与非集群版)

    集群版zookeeper安装 第一步:添加helm镜像源 helm repo add incubator http://storage.googleapis.com/kubernetes-charts ...

  8. JAVA 类显式加载

    类显式加载 1.Class.forName("classloader.Dog");  方式加载   Example1 1 package classloader; 2 3 publ ...

  9. Vue源码学习(十五):diff算法(二)交叉比对(双指针)

    好家伙, 本节来解决我们上一章留下来的问题, 新旧节点同时有儿子的情况本章继续解决 1.要做什么? 本章将解决, 1.在相同tag下子元素的替换问题 2.使用双指针进行元素替换, 实现效果如下:   ...

  10. 使用rancher rke快速安装k8s集群

    概述 Rancher Kubernetes Engine(RKE)是一个用于部署.管理和运行Kubernetes集群的开源工具.旨在简化Kubernetes集群的部署和操作. RKE具有以下特点和功能 ...