.net 项目中配置 Swagger

一、前言

二、Swagger

三、.net 项目中添加Swagger

1、准备工作

(1).net项目

(2)SwaggerController

(3)XML文档注释

2、安装Swagger包

3、 添加配置swagger中间件

(1)添加Swagger构造器

 (2)启用Swagger工具

(3)更改启动URL 

(4)实现效果

四、自定义Swagger配置

1、添加文档信息

2、使用XML文档注释

3、【Program.cs】完整配置


一、前言

作为一名程序员,有两件事是令我本人很头疼的:

  • 第一,是没有接口文档;
  • 第二,是让我写接口文档;

那有没有一种方法,可以自动的生成开发文档呢?

那当然是有的,就我这个小菜菜能遇到的问题,早就是被各位大佬解决了的!!!

(感谢感谢感谢~~~~~~~~)

二、Swagger

Swagger 规范在2015年,重命名为 OpenAPI 规范。

OpenAPI Specification - Version 3.1.0 | Swagger

OpenAPI 规范 (中文版)

  • 是一个开源的API设计工具和API文档生成工具;
  • 可以帮助开发人员更快、更简单的构建RESTful API;
  • 可以自动生成交互式的API文档;
  • 可以生成与API实时同步的接口文档;
  • 可以在SwaggerUI中直接进行接口测试;
  • 使得开发、测试、部署API都更加的容易便捷;

三、.net 项目中添加Swagger

1、准备工作

(1).net项目

如果在已有项目中添加Swagger的相关配置,那就一步步添加即可;

没有的话,可以新建一个.net项目,来学习研究Swagger这个伟大的工具;

  • 打开Visual Studio,创建一个新的测试项目【Zyl_Swagger_Demo】;
  • 选择【.net 8.0】;
  • 选择【启用OpenApi支持】;

刚创建好的项目启动后,会自动在浏览器中打开Swagger页面,如下图所示;

注意:

  • 如果项目跑起来后,没有显示如图所示界面,可能是因为在创建的时候,并未选择【启用OpenApi支持】的选项;
  • 新建项目时勾选了【启用OpenApi支持】的,项目中会自动安装Swagger包,并添加配置Swagger中间件;
  • 第2步(安装Swagger包)和第3步(添加配置swagger中间件)就可以省略不看了;

(2)SwaggerController

新建一个测试用的SwaggerController控制器;

【SwaggerController.cs】

using Microsoft.AspNetCore.Mvc;

namespace Zyl_Swagger_Demo.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class SwaggerController : ControllerBase
    {
        /// <summary>
        /// 两个数的四则运算
        /// </summary>
        /// <param name="a">数字a</param>
        /// <param name="b">数字b</param>
        /// <param name="type">运算符号</param>
        /// <remarks>
        /// 运算符号只能是 +、-、*、\ 中的一种
        /// </remarks>
        /// <response code="200">接口数据正常返回</response>
        /// <response code="400">参数传递有误</response>
        [HttpPost]
        public string Calculate(int a, int b, string type) { 
            switch (type.Trim()) {
                case "+":
                    return $"两数相加得:{a + b}";
                case "-":
                    return $"两数相减得:{a + b}";
                case "*":
                    return $"两数相乘得:{a + b}";
                case "/":
                    return $"两数相除得:{a + b}";
                default:
                    return "您输入的类型有误,请重新输入!";
            }
        }
    }
}

注意:在这个Controller 中已经添加了一些XML文档注释;

(3)XML文档注释

Documentation comments - C# (文档注释)

  • <summary> 用来描述接口具体功能;
  • <param> 用来描述接口参数;
  • <remarks> 用来描述接口补充信息;
  • <response> 用来描述接口响应内容;
  • ......
TagPurpose
<c>Set text in a code-like font
<code>Set one or more lines of source code or program output
<example>Indicate an example
<exception>Identifies the exceptions a method can throw
<include>Includes XML from an external file
<list>Create a list or table
<para>Permit structure to be added to text
<param>Describe a parameter for a method or constructor
<paramref>Identify that a word is a parameter name
<permission>Document the security accessibility of a member
<remarks>Describe additional information about a type
<returns>Describe the return value of a method
<see>Specify a link
<seealso>Generate a See Also entry
<summary>Describe a type or a member of a type
<typeparam>Describe a type parameter for a generic type or method
<typeparamref>Identify that a word is a type parameter name
<value>Describe a property

2、安装Swagger包

使用NuGet安装【Swashbuckle.AspNetCore】包;

3、 添加配置swagger中间件

(1)添加Swagger构造器

添加Swagger中间件到项目中;

【Program.cs】

......

builder.Services.AddControllers();

// 添加Swagger构造器
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

......

 (2)启用Swagger工具

在开发环境中启用Swagger中间件和SwaggerUI工具;

【Program.cs】

......

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();   // 启用Swagger中间件
    app.UseSwaggerUI(); // 启用SwaggerUI工具
}

......

(3)更改启动URL 

更改项目启动时的URL,启动时打开SwaggerUI页面;

【launchSettings.json】

......

"launchBrowser": true,
"launchUrl": "swagger",

......

(4)实现效果

出现如下图所示SwaggerUI界面,则说明Swagger工具添加成功;

 emmmm......

一个开发文档如果长成这样,那看到的人员估计是要疯掉的;

虽然现在还没有我们想要的一些接口信息,但可以通过Swagger配置,添加一些扩展内容;

四、自定义Swagger配置

1、添加文档信息

// 添加Swagger构造器
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(options =>
{
    options.SwaggerDoc("v1", new OpenApiInfo
    {
        Version = "V1", // 接口文档版本
        Title = "Swagger API",  // 接口文档标题
        Description = "这是用来测试Swagger的接口文档!",    // 接口文档描述
    });
});

2、使用XML文档注释

在【Program.cs】中,添加XML文档注释;

......

builder.Services.AddSwaggerGen(options =>
{
    options.SwaggerDoc("v1", new OpenApiInfo
    {
        Version = "V1", // 接口文档版本
        Title = "Swagger API",  // 接口文档标题
        Description = "这是用来测试Swagger的接口文档!",    // 接口文档描述
    });

    // 添加XML注释
    var xmlFileName = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
    var xmlFilePath = Path.Combine(AppContext.BaseDirectory, xmlFileName);
    options.IncludeXmlComments(xmlFilePath);
});

......

重新启动,就可以看到在SwapperController接口中添加的XML文档注释相关信息了。 

3、【Program.cs】完整配置

【Program.cs】

using System.Reflection;
using Microsoft.OpenApi.Models;

namespace Zyl_Swagger_Demo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);

            // Add services to the container.

            builder.Services.AddControllers();

            // 添加Swagger构造器
            builder.Services.AddEndpointsApiExplorer();
            builder.Services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("v1", new OpenApiInfo
                {
                    Version = "V1", // 接口文档版本
                    Title = "Swagger API",  // 接口文档标题
                    Description = "这是用来测试Swagger的接口文档!",    // 接口文档描述
                });

                // 添加XML注释
                var xmlFileName = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlFilePath = Path.Combine(AppContext.BaseDirectory, xmlFileName);
                options.IncludeXmlComments(xmlFilePath);
            });

            var app = builder.Build();

            // Configure the HTTP request pipeline.

            if (app.Environment.IsDevelopment())
            {
                // 启用Swagger中间件
                app.UseSwagger();

                // 启用SwaggerUI工具
                app.UseSwaggerUI(); 
            }

            app.UseHttpsRedirection();

            app.UseAuthorization();


            app.MapControllers();

            app.Run();
        }
    }
}

注意:一定要在【launchSettings.json】文件中更改程序的启动项; 

========================================================================

如有问题,还请各位大佬多多指点~~~

每天进步一点点~加油鸭!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/757363.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解Unix/Linux中sync、fsync、fdatasync和sync_file_range系统调用以及他们的区别

前言 在linux内核中都有缓冲区或者页面高速缓存&#xff0c;大多数磁盘IO都是通过缓冲写的。当你想将数据write进文件时&#xff0c;内核通常会将该数据复制到其中一个缓冲区中&#xff0c;如果该缓冲没被写满的话&#xff0c;内核就不会把它放入到输出队列中。当这个缓冲区被…

5000字深入讲解:企业数字化转型优先从哪个板块开始?

很多企业都知道数字化转型重要&#xff0c;但不知道应该怎样入手&#xff0c;分哪些阶段。以下引用国内领先数字化服务商 织信Informat 的数字化转型方法论材料&#xff0c;且看看他们是如何看待数字化转型的&#xff1f;数字化转型应该从哪先开始&#xff1f;如何做&#xff1…

编译工具-Gradle

文章目录 Idea中配置Gradle项目project目录settings.gradlebuild.gradlegradlewgradlew.bat Gradle Build生命周期编写Settings.gradle编写Build.gradleTasksPlugins Idea中配置 配置项&#xff1a;gradle位置 及仓库位置 Gradle项目 Task&#xff0c;settings.gradle,build.…

【ai】tx2 nx:ubuntu18.04 yolov4-triton-tensorrt 成功部署server 运行

isarsoft / yolov4-triton-tensorrt运行发现插件未注册? 【ai】tx2 nx: jetson Triton Inference Server 部署YOLOv4 【ai】tx2 nx: jetson Triton Inference Server 运行YOLOv4 对main 进行了重新构建 【ai】tx2 nx :ubuntu查找NvInfer.h 路径及哪个包、查找符号【ai】tx2…

调用京灵平台接口,很详细

调用京灵平台接口&#xff0c;很详细 一、准备1、开发资源2、申请环境 二、测试接口调用1、查看接口文档2、查看示例代码3、引入对应依赖4、改造后需要的依赖5、测试调用 三、工具类1、配置dto2、公共参数dto3、请求参数dto4、响应参数dto4、调用工具类&#xff08;重要&#x…

免费翻译API及使用指南——百度、腾讯

目录 一、百度翻译API 二、腾讯翻译API 一、百度翻译API 百度翻译API接口免费翻译额度&#xff1a;标准版&#xff08;5万字符免费/每月&#xff09;、高级版&#xff08;100万字符免费/每月-需个人认证&#xff0c;基本都能通过&#xff09;、尊享版&#xff08;200万字符免…

matlab中simulink仿真软件的基础操作

&#xff08;本内容源自《详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真》 刘学勇编著的第二章内容&#xff0c;有兴趣的可以阅读该书&#xff09; 例&#xff1a;简单系统输入为两个不同频率的正弦、余弦信号&#xff0c;输出为两信号之和&#xff0c;建立模型。 在…

webpack源码深入--- webpack的编译主流程

webpack5的编译主流程 根据watch选项调用compiler.watch或者是compiler.run()方法 try {const { compiler, watch, watchOptions } create();if (watch) {compiler.watch(watchOptions, callback);} else {compiler.run((err, stats) > {compiler.close(err2 > {callb…

使用鸿蒙HarmonyOs NEXT 开发 快速开发 简单的购物车页面

目录 资源准备&#xff1a;需要准备三张照片&#xff1a;商品图、向下图标、金钱图标 1.显示效果&#xff1a; 2.源码&#xff1a; 资源准备&#xff1a;需要准备三张照片&#xff1a;商品图、向下图标、金钱图标 1.显示效果&#xff1a; 定义了一个购物车页面的布局&#x…

[方法] Unity 3D模型与骨骼动画

1. 在软件中导出3D模型 1.1 3dsmax 2014 1.1.1 TGA转PNG 3dsmax的贴图格式为tga&#xff0c;我们需要在在线格式转换中将其转换为Unity可识别的png格式。 1.1.2 模型导出 导出文件格式为fbx。在导出设置中&#xff0c;要勾选三角算法&#xff0c;取消勾选摄像机和灯光&#…

mysql解压版本安装5.7

1. 官网下载好解压版本 我这边5.7版本 https://dev.mysql.com/downloads/file/?id523570 mysql官网 创建 my.ini文件 内容如下 [client] #客户端设置&#xff0c;即客户端默认的连接参数# socket /data/mysqldata/3306/mysql.sock #用于本地连接的socket套接字 # 默…

运维锅总详解HAProxy

本文尝试从HAProxy简介、HAProxy工作流程及其与Nginx的对比对其进行详细分析&#xff1b;在本文最后&#xff0c;给出了为什么Nginx比HAProxy更受欢迎的原因。希望对您有所帮助&#xff01; HAProxy简介 HAProxy&#xff08;High Availability Proxy&#xff09;是一款广泛使…

【知识学习】阐述Unity3D中Profile和性能的概念及使用方法示例

在Unity3D中&#xff0c;"Profile"和"性能"是两个相关但不同的概念&#xff0c;它们在游戏开发中扮演着重要的角色。 Profile&#xff08;配置文件&#xff09; "Profile"在Unity中通常指的是一种配置文件&#xff0c;它包含了一系列的设置和参…

JAVA医院绩效考核管理系统源码:系统优势、系统目的、系统原则 (自主研发 功能完善 可直接上项目)

JAVA医院绩效考核管理系统源码&#xff1a;系统优势、系统目的、系统原则 &#xff08;自主研发 功能完善 可直接上项目&#xff09; 医院绩效考核系统优势 1.实现科室负责人单独考核 对科室负责人可以进行单独考核、奖金发放。 2. 科室奖金支持发放到个人 支持奖金二次分配&…

Numpy array和Pytorch tensor的区别

1.Numpy array和Pytorch tensor的区别 笔记来源&#xff1a; 1.Comparison between Pytorch Tensor and Numpy Array 2.numpy.array 4.Tensors for Neural Networks, Clearly Explained!!! 5.What is a Tensor in Machine Learning? 1.1 Numpy Array Numpy array can only h…

已解决问题 | 该扩展程序未列在 Chrome 网上应用店中,并可能是在您不知情的情况下添加的

在Chrome浏览器中&#xff0c;如果你看到“该扩展程序未列在 Chrome 网上应用店中&#xff0c;并可能是在您不知情的情况下添加的”这样的提示&#xff0c;通常是因为该扩展程序没有通过Chrome网上应用店进行安装。以下是解决这个问题的步骤&#xff1a; 解决办法&#xff1a;…

Bridging nonnull in Objective-C to Swift: Is It Safe?

Bridging nonnull in Objective-C to Swift: Is It Safe? In the world of iOS development, bridging between Objective-C and Swift is a common practice, especially for legacy codebases (遗留代码库) or when integrating (集成) third-party libraries. One importa…

uniapp+vue3开发微信小程序踩坑集

本文主要记录使用uniappvue3开发微信小程序遇见的各种常见问题及注意点。&#xff08;持续更新&#xff09; 问题&#xff1a; 自定义组件为什么有些样式加不上去 给自定义组件增加class的时候&#xff0c;有时候不生效有时候生效&#xff0c;一度让我怀疑自己记忆错乱。后来…

揭秘Etched AI:三个哈佛辍学00后挑战英伟达,推出Transformer专用ASIC芯片sohu

人工智能领域最近掀起了一股新的热潮&#xff0c;三位哈佛辍学的00后本科生创建了Etched AI&#xff0c;并成功推出了一款超强AI芯片sohu&#xff0c;直指英伟达的AI芯片帝国。这款芯片被誉为比英伟达H100快20倍&#xff0c;吸引了众多科技界的关注。本文将深入探讨Etched AI及…

css 布局出现无法去除的空白

案件介绍&#xff1a;在没有设置任何的css样式的情况下 文字顶部出现无法去除的空白 源代码 <div click"onClick" ><div class"tableTextButton--container"></div><Icon v-if"loading || thisLoading" type"ios-lo…