.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.mzph.cn/pingmian/37447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp, ‍[⁠TypeError⁠]‍ “Failed to fetch dynamically imported module“ 报错解决思路

文章目录 1. 背景2. 报错3. 解决思路4. 思考参考1. 背景 最近基于uniapp开发一款设备参数调试的APP软件,在使用第三方插件的过程中,出现下面的报错。 2. 报错 [plugin:vite:import-analysis] Cannot find module ‘D:/leaning/uniapp/demo/jk-uts-udp示例/uni_modules/uts-…

对于CDA一级考试该咋准备??!

一、了解考试内容和结构 CDA一级考试主要涉及的内容包括&#xff1a;数据分析概述与职业操守、数据结构、数据库基础与数据模型、数据可视化分析与报表制作、Power BI应用、业务数据分析与报告编写等。 CDA Level Ⅰ 认证考试大纲:https://edu.cda.cn/group/4/thread/174335 …

怎么用JavaScript写爬虫

随着互联网技术的不断发展&#xff0c;爬虫&#xff08;web crawler&#xff09;已经成为当前最热门的爬取信息方式之一。通过爬虫技术&#xff0c;我们可以轻松地获取互联网上的数据&#xff0c;并用于数据分析、挖掘、建模等多个领域。而javascript语言则因其强大的前端开发工…

C++精解【9】

文章目录 大整数GMP概述GMP安装 [cygwin](https://cygwin.com/install.html)安装 gmpexample Eigen基本属性和运算 大整数GMP 概述 GMP GMP是一个用于任意精度算术的免费库&#xff0c;可对有符号整数、有理数和浮点数进行操作。除了运行GMP的机器的可用内存所暗示的精度外&…

expandtabs()方法——tab符号转为空格

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 expandtabs()方法把字符串中的tab&#xff08;\t&#xff09;符号转为空格&#xff0c;tab&#xff08;\t&#xff09;符号默认的空格数是…

简单科普-GPT到底是什么?

1.ChatGPT ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;是OpenAI研发的一款聊天机器人程序 &#xff0c;于2022年11月30日发布 。ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够基于在预训练阶段所见…

MATLAB2024a下的神经网络聚类工具箱聚类

1 打开神经网络聚类工具箱GUI界面 图1-1 2 导入训练数据 图2-1 导入训练集如图2-2&#xff0c;图2-3、图2-4所示 图2-2 图2-3 图2-4 如图2-4&#xff0c;确认无误点击确定 3 模型训练 如图3-1&#xff0c;调整验证集与测试集比例及映射大小后点击”训练“&#xff0c;开始训练…

Oracle、MySQL、PostgreSQL对比

在对比 Oracle、MySQL 和 PostgreSQL 关于 range/list 分区键更新操作时&#xff0c; Oracle: 默认情况下不允许对分区键进行更新操作&#xff0c;否则会报错 ORA-14402: updating partition key column would cause partition to change 。可以通过设置 ALTER TABLE table_nam…

uview文本框组件计数count报错u--textarea

报错内容&#xff1a; [Vue warn]: Error in render: “TypeError: Cannot read property ‘length’ of null” found in —> at uni_modules/uview-ui/components/u-textarea/u-textarea.vue at uni_modules/uview-ui/components/u–textarea/u–textarea.vue mp.runtime.…

如何理解泛型的编译期检查

既然说类型变量会在编译的时候擦除掉&#xff0c;那为什么我们往 ArrayList 创建的对象中添加整数会报错呢&#xff1f;不是说泛型变量String会在编译的时候变为Object类型吗&#xff1f;为什么不能存别的类型呢&#xff1f;既然类型擦除了&#xff0c;如何保证我们只能使用泛型…

浪潮信息AIStation与毕昇:让AI大模型开发变得更易用

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的速度改变着世界。近日&#xff0c;毕昇大模型应用开发平台和浪潮信息AIStation智能业务生产创新平台完成兼容性互认证。二者的融合&#xff0c;不仅简化了大模型定制开发的流程&#xff…

python--列表list切分(超详细)

在Python中&#xff0c;列表&#xff08;list&#xff09;的切分&#xff08;slicing&#xff09;是一种非常有用的操作&#xff0c;它允许你获取列表的一部分而不是整个列表。切分的基本语法如下&#xff1a; list[start:stop:step] start&#xff1a;切分的起始索引&#x…

【进阶篇-Day6:JAVA中Arrays工具类、排序算法、正则表达式的介绍】

目录 1、Arrays工具类2、排序算法2.1 冒泡排序2.2 选择排序2.3 二分查找&#xff08;折半查找&#xff09;&#xff08;1&#xff09;概念&#xff1a;&#xff08;2&#xff09;步骤&#xff1a; 3、正则表达式3.1 正则表达式的概念&#xff1a;3.2 正则表达式的格式&#xff…

Unidbg调用-补环境V3-Hook

结合IDA和unidbg,可以在so的执行过程进行Hook,这样可以让我们了解并分析具体的执行步骤。 应用场景:基于unidbg调试执行步骤 或 还原算法(以Hookzz为例)。 1.大姨妈 1.1 0x1DA0 public void hook1() {

【项目日记(二)】搜索引擎-索引制作

❣博主主页: 33的博客❣ ▶️文章专栏分类:项目日记◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多项目内容 目录 1.前言2.索引结构2.1创捷索引2.2根据索引查询2.3新增文档2.4内存索引保存到磁盘2.5把…

android/res/raw/xxx.txt 手动添加翻译

android/res/values 下的strings.xml可以添加翻译 如果字符串写在android/res/raw&#xff0c;按如下&#xff0c;手动翻译&#xff0c; 代码片段 String info "";InputStream stream null;try {// 翻译android/res/raw/newtork_privacy_policy.txt 20240619 begi…

U-Net for text-to-image

1. Unet for text-to-image 笔记来源&#xff1a; 1.hkproj/pytorch-stable-diffusion 2.understanding u-net a comprehensive tutorial 3.Deep Dive into Self-Attention by Hand 4.Towards Understanding Cross and Self-Attention in Stable Diffusion for Text-Guided Im…

java大型医院绩效考核系统源码(医院为什么需要绩效机制?)医院绩效考核系统源码 医院管理绩效考核系统源码

java大型医院绩效考核系统源码&#xff08;医院为什么需要绩效机制&#xff1f;&#xff09;医院绩效考核系统源码 医院管理绩效考核系统源码 医院作为提供医疗服务的核心机构&#xff0c;其运营和管理效率直接影响到患者的就医体验、治疗效果以及医院的长期发展。因此&#xf…

Github 2024-06-29 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-29统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Move项目1Rust编程语言的可靠异步运行时:Tokio 创建周期:2759 天开发语言:Rust协议类型:MIT LicenseStar数量:24319 个Fork数量…

什么是js?特点是什么?组成部分?

Js是一种直译式脚本语言&#xff0c;一种动态类型&#xff0c;弱类型&#xff0c;基于原型的高级语言。 直译式&#xff1a;js程序运行过程中直接编译成机器语言。 脚本语言&#xff1a;在程序运行过程中逐行进行解释说明&#xff0c;不需要预编译。 动态类型&#xff1a;js…