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

相关文章

springboot2.1.3 hystrix集成及hystrix-dashboard监控详解

《springboot2.1.3hystrix集成及hystrix-dashboard监控详解》Hystrix是Netflix开源的微服务容错工具,通过线程池隔离和熔断机制防止服务崩溃,支持降级、监... 目录Hystrix是Netflix开源技术www.chinasem.cn栈中的又一员猛将Hystrix熔

MyBatis-Plus 与 Spring Boot 集成原理实战示例

《MyBatis-Plus与SpringBoot集成原理实战示例》MyBatis-Plus通过自动配置与核心组件集成SpringBoot实现零配置,提供分页、逻辑删除等插件化功能,增强MyBa... 目录 一、MyBATis-Plus 简介 二、集成方式(Spring Boot)1. 引入依赖 三、核心机制

SpringBoot集成P6Spy的实现示例

《SpringBoot集成P6Spy的实现示例》本文主要介绍了SpringBoot集成P6Spy的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录本节目标P6Spy简介抛出问题集成P6Spy1. SpringBoot三板斧之加入依赖2. 修改

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

springboot项目中集成shiro+jwt完整实例代码

《springboot项目中集成shiro+jwt完整实例代码》本文详细介绍如何在项目中集成Shiro和JWT,实现用户登录校验、token携带及接口权限管理,涉及自定义Realm、ModularRe... 目录简介目的需要的jar集成过程1.配置shiro2.创建自定义Realm2.1 LoginReal

SpringBoot集成Shiro+JWT(Hutool)完整代码示例

《SpringBoot集成Shiro+JWT(Hutool)完整代码示例》ApacheShiro是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,在现代应用开发中,Shiro因... 目录一、背景介绍1.1 为什么使用Shiro?1.2 为什么需要双Token?二、技术栈组成三、环境

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

解决hive启动时java.net.ConnectException:拒绝连接的问题

《解决hive启动时java.net.ConnectException:拒绝连接的问题》Hadoop集群连接被拒,需检查集群是否启动、关闭防火墙/SELinux、确认安全模式退出,若问题仍存,查看日志... 目录错误发生原因解决方式1.关闭防火墙2.关闭selinux3.启动集群4.检查集群是否正常启动5.

SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南

《SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南》本文将基于开源项目springboot-easyexcel-batch进行解析与扩展,手把手教大家如何在SpringBo... 目录项目结构概览核心依赖百万级导出实战场景核心代码效果百万级导入实战场景监听器和Service(核心