Asp .Net Core 系列:基于 Swashbuckle.AspNetCore 包 集成 Swagger

2024-01-15 07:04

本文主要是介绍Asp .Net Core 系列:基于 Swashbuckle.AspNetCore 包 集成 Swagger,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是 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");
})

image

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

image

添加 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[] {}}});

image

第三方包

PackageDescription
Swashbuckle.AspNetCore.FiltersSome 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.ExtensionsSome 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.FluentValidationUse FluentValidation rules instead of ComponentModel attributes to augment generated Swagger Schemas
MMLib.SwaggerForOcelotAggregate 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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/608040

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文:Improving Language Understanding by Generative Pre-Training 链接:https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点:生成loss和微调loss同时作用,让下游任务来适应预训

【Shiro】Shiro 的学习教程(三)之 SpringBoot 集成 Shiro

目录 1、环境准备2、引入 Shiro3、实现认证、退出3.1、使用死数据实现3.2、引入数据库,添加注册功能后端代码前端代码 3.3、MD5、Salt 的认证流程 4.、实现授权4.1、基于角色授权4.2、基于资源授权 5、引入缓存5.1、EhCache 实现缓存5.2、集成 Redis 实现 Shiro 缓存 1、环境准备 新建一个 SpringBoot 工程,引入依赖: