.NET6之MiniAPI(十八):OpenAPI swagger

从本篇开始,介绍一些很不错的三方库,来丰富MiniAPI的使用。

在创建MiniAPI项目时,模板提供了一个是否启用OpenAPI的选项,足见这个三方库的优势和强大。

9aae9863ccf39b7a8291cc497253ad05.png

OpenAPI为我们测试API提供了强大的支持,调用API的开发人员,可以轻松测试,参照开发接口和接口参数,有效的节省了大量文档的书写和调试流程复杂性。

为了更好的说明,需要开启注释文件生成功能,打开项目文件,增加GenerateDocumentdationFile节点即可。

<Project Sdk="Microsoft.NET.Sdk.Web"><PropertyGroup><TargetFramework>net6.0</TargetFramework><Nullable>enable</Nullable><ImplicitUsings>enable</ImplicitUsings><GenerateDocumentationFile>True</GenerateDocumentationFile></PropertyGroup><ItemGroup><PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" /></ItemGroup>
</Project>

先看Swagger引入的代码:

using Microsoft.OpenApi.Models;var builder = WebApplication.CreateBuilder(args);builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{c.SwaggerDoc("v1",new OpenApiInfo{Title = "MiniAPI08-V1",Version = "v1"});//设置xml引用var filePath = Path.Combine(System.AppContext.BaseDirectory, "MiniAPI08.xml");c.IncludeXmlComments(filePath);//添加授权var schemeName = "Bearer";c.AddSecurityDefinition(schemeName, new OpenApiSecurityScheme{In = ParameterLocation.Header,Description = "请输入不带有Bearer的Token",Name = "Authorization",Type = SecuritySchemeType.Http,Scheme = schemeName.ToLowerInvariant(),BearerFormat = "JWT"});c.AddSecurityRequirement(new OpenApiSecurityRequirement {{new OpenApiSecurityScheme{Reference = new OpenApiReference{Type = ReferenceType.SecurityScheme,Id = schemeName}},new string[0]}});
});var app = builder.Build();if (app.Environment.IsDevelopment())
{app.UseSwagger();app.UseSwaggerUI(c =>{c.EnablePersistAuthorization();});
}app.MapPut("/test", (Data data) =>
{
})
.WithName("puttest")
.WithTags("all test");app.MapDelete("/test/{id}", TestHandle.DeleteTest)
.WithName("deletetest")
.WithTags("all test");app.MapGet("/test/{id}", (HttpRequest request, int id) =>
{Console.WriteLine(request.Headers["Authorization"]);
})
.WithName("gettest")
.WithTags("all test")
.Produces<Data>(StatusCodes.Status200OK)
.Produces(StatusCodes.Status404NotFound);app.MapPost("/test", (Data data) =>{})
.WithName("posttest")
.WithTags("all test");app.Run();class TestHandle
{/// <summary>/// 删除Test/// </summary>/// <param name="id">Data的主键</param>/// <returns></returns>public static bool DeleteTest(int id){return true;}
}
/// <summary>
/// 提交数据
/// </summary>
class Data
{/// <summary>/// 编号 /// </summary>public int Id { get; set; }/// <summary>/// 名称/// </summary>public string Name { get; set; }
}

Tags 是all test,可以把同类操作放在一个组里,对应着swagger的一组

290f169cc636bc1ca9e24a398f9eeade.png

现在的MiniAPI对单个请求还不支持注释(就是get ,post,put,delete的api注释),相信.NET 7会解决掉。

如果请求的方法是匿名方法,同样参数也是不支持说明的,如果像delete请求,指像命名方法,方法的参数是注释说明是会显示在swagger里的:

701074090eba8409aea84856502c1211.png

如查Mini API支持Token验证,可以通过AddSwaggerGen添加Security来实现自带Token,具体做法见代码实现:c.AddSecurityDefinition和 c.AddSecurityRequirement。这样可以在Swagger页面,点击Authorize按钮,输入Token,这时,所有的请求都会带上Authorization的header。

6d85c30833eb2baa4c1e59d161709cf6.png

调用Get方法时,会自动带上Authorization

b784ed2fec33d58d1f34272cb603104d.png

后端会获取到Token数据

8e95ec2b5d65d7663b971bc425976998.png

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

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

相关文章

查看linux内存还剩多少g,Linux 查看存储空间、内存以及清除内存

查看存储空间&#xff1a;zdsubuntu ~ $ df -hl文件系统 容量 已用 可用 已用% 挂载点udev 972M 0 972M 0% /devtmpfs 199M 6.3M 192M 4% /run/dev/sda1 23G 5.3G 17G 25% /tmpfs 992M 212K 991M 1% /dev/shmtmpfs 5.0M 4.0K 5.0M 1% /run/locktmpfs 992M 0 992M 0% /sys/fs/cg…

Android之ndk-build出现c:28:51: error: ‘get_string‘ undeclared here (not in a function)解决办法

1 problem ndk-build error: get_string undeclared here (not in a function) 2 resolve jstring get_strstring(JNIEnv* env, jobject thiz) {return (*env)->NewStringUTF(env, "I am chenyu, 动态注册JNI"); }jint add_int(JNIEnv* env, jobject jobj, ji…

c/c++与java------之JNI学习(一)

一、java 调用c/c 步骤&#xff1a; 1、在java类中创建一个native关键字声明的函数 2、使用javah生成对应的.h文件 3、在c/c中实现对应的方法 4、使用vs2012创建一个win32空白项目&#xff0c;将jdk中的jni.h和jni_md.h文件拷贝到工程中&#xff0c;修改项目属性为&#xff08;…

BeetleX服务网关授权配置

很多应用服务都需要授权访问&#xff0c;为了更好地统一处理这种授权验证&#xff0c;服务网关提供了JWT验证插件用于解决这问题。网关的JWT验证插件默认是关闭的&#xff0c;只有当开启后网关才会对请求进行拦截验证处理。开启开启JWT验证需要在插件管理里开启Webapi JWT验证插…

关于Spring的事务Transactional,锁同步,并发线程

Spring事务传播机制和数据库隔离级别 在标准SQL规范中定义了4个事务隔离级别&#xff0c;不同隔离级别对事务处理不同 。 未授权读取&#xff08;Read Uncommitted&#xff09;&#xff1a; 也称 未提交读。允许脏读取但不允许更新丢失&#xff0c;如果一个事务已经开始写数据则…

linux 编译指cpu内核,linux内核编译与配置

linux是如何组成的&#xff1f;答&#xff1a;linux是由用户空间和内核空间组成的为什么要划分用户空间和内核空间&#xff1f;答&#xff1a;有关CPU体系结构&#xff0c;各处理器可以有多种模式&#xff0c;而LInux这样的划分是考虑到系统的安全性&#xff0c;比如X86可以有4…

Linux下的压缩与解压缩

tar命令zip命令unzip命令gzip命令bzip2命令tar命令&#xff1a;压缩和解压缩tar格式的文件格式&#xff1a;tar [主选项辅选项] 文件或目录【主选项告诉tar要做什么事&#xff0c;是必须要有的&#xff0c;辅选项是辅助使用的&#xff0c;和通常的选项一样&#xff0c;可选】主…

Android之JNI动态注册native方法和JNI数据简单使用

1、爆结果照片 2、介绍JNI注册方式 JVM 查找 native 方法有两种方式: 1)、按照 JNI 规范的命名规则(静态注册) 2) 、调用 JNI 提供的 RegisterNatives 函数,将本地函数注册到 JVM 中(动态注册) 静态注册的实现可以参考我的这篇博客 http://blog.csdn.net/u01…

保存现场数据和状态:onSaveInstanceState\onRestoreInstanceState\onCreate()

当某个activity变得“容易”被系统销毁时&#xff0c;该activity的onSaveInstanceState就会被执行&#xff0c;除非该activity是被用户主动销毁的&#xff0c;例如当用户按BACK键的时候。 注意上面的双引号&#xff0c;何为“容易”&#xff1f;言下之意就是该activity还没有被…

setTimeout(function(){}, 0);

1 for (var i 0; i < 3; i) { 2 setTimeout(function() { 3 console.log(i); 4 }, 0); 5 console.log(i); 6 } 结果是&#xff1a; 0 1 2 3 3 3 分析&#xff1a; 1、在实践中&#xff0c;setTimeout 会在其完成当前任何延迟事件的事件处理器的执行&am…

Linux怎么查询全部容器时间,linuxea:如何单单修改docker容器的系统时间

一般情况下&#xff0c;我们仅仅需要修改容器的时间与我们宿主机的实际实际一致即可&#xff0c;我们知道&#xff0c;默认情况下docker容器是不允许访问系统时钟&#xff0c;但是有一款开源的软件使这样的需求变成了可能。此lib拦截用于检索当前时间和日期的所有系统调用&…

关闭系统索引(转)

转自“http://jingyan.baidu.com/article/d621e8daeaaa392865913f0a.html” 关闭系统索引 Windows索引服务是为文件、电子邮件和其他内容提供内容索引、属性缓存和搜索结果。 Windows系统在安装完成后&#xff0c;会逐步创建特定文件、文件夹和其它目标的索引&#xff0c;例如开…

Android之ndk中JNIENV env->NewStringUTF (*env)->NewStringUTF

JNIEnv是指向可用JNI函数表的接口指针&#xff0c;原生代码通过JNIEnv接口指针提供的各种函数来使用虚拟机的功能。JNIEnv是一个指向线程-局部数据的指针&#xff0c;而线程-局部数据中包含指向线程表的指针。实现原生方法的函数将JNIEnv接口指针作为它们的第一个参数。 原生代…

最佳新秀Java(22)——再次了解泛型

仿制药Java SE 1.5新功能。通用自然是参数化类型。即操作数据类型被指定为一个参数。这样的参数类型可以在课堂上使用、创建的接口和方法&#xff0c;他们被称为通用类、、泛型方法。Java语言引入泛型的优点是安全简单。规则和限制1、泛型的类型參数仅仅能是类类型&#xff08;…

如何编译 dotnet/aspnetcore 源代码

前言最近&#xff0c;准备为 dotnet/aspnetcore 修改 issue&#xff0c;但是在 clone 代码后&#xff0c;发现要编译成功&#xff0c;远没有想象中那么容易。因此&#xff0c;将整个过程进行记录&#xff0c;以供大家参考。以下操作都是在 Windows 10 下完成。0.环境准备详见官…

查看Linux进程CPU过高具体的线程堆栈(不中断程序)

转自&#xff1a;http://blog.csdn.net/mergerly/article/details/47731305 1、TOP命令&#xff0c;找到占用CPU最高的进程 [plain] view plaincopy $ top top - 20:11:45 up 850 days, 1:18, 3 users, load average: 1.04, 1.01, 0.99 Tasks: 61 total, 1 running, …

linux 编译工具链,Linux工具链for TKStudio下载_Linux工具链for TKStudio官方下载-太平洋下载中心...

Linux工具链for TKStudio是一款支持TKStudio IDE集成开发环境的辅助LINUX交叉编译工具链软件&#xff0c;交叉编译就是跨架构编译&#xff0c;编译出来的程序不能在本机执行(当然有例外情况)。所以这个时候就需要交叉编译工具链。译工具链一般最简化的为 binutils gcc glibc …

pom.xml配置详解

http://blog.csdn.net/uohzoaix/article/details/7035307转载于:https://www.cnblogs.com/friends-wf/p/3829580.html

Android之在Activity中动态得到Adapter类中数据

1、问题 Activity中动态得到Adapter数据2、解决办法 在Adapter中写入接口Class Adapter {Interface A {void onClick(int a, int b);}A a;public void setListen (A a) {this.a a;}public void A (int a, int b) {if (a ! null ) {a.onClick(a, b);}}} class MainActivity ex…

Convolutional Neural Networks for Visual Recognition 1

Introduction 这是斯坦福计算机视觉大牛李菲菲最新开设的一门关于deep learning在计算机视觉领域的相关应用的课程。这个课程重点介绍了deep learning里的一种比较流行的模型&#xff1a;Convolutional Neural Networks&#xff0c;简称CNN&#xff0c;主要利用CNN来做visual r…