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

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

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的一组

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

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

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

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

后端会获取到Token数据

.NET6之MiniAPI(十八):OpenAPI swagger相关推荐

  1. .NET6之MiniAPI(十九):NLog

    在本系例文章的第八篇中,我们聊过官方的日志实现,即<.NET6之MiniAPI(八):日志>.但官方的日志功能更多是提供了一个实现基础,对于要求一个灵活,强大,方便的日志体系,官方的还是有 ...

  2. .NET6之MiniAPI(十五):跨域CORS(下)

    前一篇的跨域请求的方式是松宽的方式,毕竟跨域有安全风险,应尽量少的允许访问必要资源,本篇分别从请求方法,请求头和请求凭据方面了解跨域设置. 请求方法: api项目,get,post是默认访问,这里只设 ...

  3. .NET6之MiniAPI(十四):跨域CORS(上)

    为了说明跨请求,创建了两个项目,一个mini api,端口是5001,另一个razor page项目,端口是5280.5280项目会在页面用ajax的方式来请求5001,形成跨域请求,由于是本地测试, ...

  4. .NET6之MiniAPI(十二):引入EntityFramewor

    说明:本篇重点说明MiniAPI引入EntityFramework,EF的使用不是本篇的重点 本篇是在MiniAPI中使用EntityFramework,所以先奉上创建数据的脚本,数据库是SQL Se ...

  5. .NET6之MiniAPI(十六):数据保护

    对于web,安全是一个永久的话题,所以ASP.NET Core数据保护提供了一个简单,易用的加密API,可以用来保护数据,密钥管理和轮换. ASP.NET Core的数据保护是根据本机的一个key来生 ...

  6. .NET6之MiniAPI(十):基于策略的身份验证和授权

    JWT不管是基于角色,还是自定义策略,实现的步骤都是大同小异的,基于自定义策略的步骤如下: 1.appsettings.json中配置JWT参 2.添加身份认证和授权服务和中间件,并设置为策略模式和策 ...

  7. .NET6之MiniAPI(三十):结束篇(附链接)

    不知不觉来到了<.NET6之MiniAPI>的第三十篇,回顾之前的篇幅,主要涉及如下: HTTP请求,应答 Request 桂素伟,公众号:桂迹.NET6之MiniAPI(二):reque ...

  8. NeHe OpenGL第二十八课:贝塞尔曲面

    NeHe OpenGL第二十八课:贝塞尔曲面 贝塞尔曲面: 这是一课关于数学运算的,没有别的内容了.来,有信心就看看它吧. 贝塞尔曲面 作者: David Nikdel ( ogapo@ithink. ...

  9. 2008R2Win7管理二十八Mail之基本使用

    2008R2Win7管理二十八Mail之基本使用 上篇我们已经安装好了exchange2010,呵呵本片简单介绍和看下ex2010的基本界面和使用 安装完成打开exchange控制台如图所示 汗,有试 ...

最新文章

  1. PowerDesigner 常用设置
  2. mysql主从配置访问_Mysql主从配置,实现读写分离
  3. 亲测三遍!8步搭建一个属于自己的网站
  4. HALCON 21.11:深度学习笔记(2)
  5. Bailian2819 W的密码【密码+模拟】
  6. 安装Electron
  7. CSS 子元素铺满整个父元素、CSS + JQuery 实现遮罩层
  8. 八款你不得不知的开源前端JS框架
  9. Android 蓝牙终端交互管理
  10. 计算机会计信息系统的数据处理方式一般,《会计信息系统复习资料.doc
  11. Ext.grid.EditorGridPanel列表复选框不能随意多选的问题
  12. PhoneGap 外掛程式開發指南
  13. MFC小游戏之坦克大战
  14. USACO-Section3.2 Feed Ratios【克莱默法则】
  15. python新年贺卡_写个新年贺卡生成器,各位小伙伴们新年快乐呀~
  16. 二元灰狼优化(BGWO)应用于特征选择任务(Matlab代码实现)
  17. 【一起读源码】1. Java 中元组 Tuple
  18. diy nas配置推荐2019_5款NAS 系统横向测评,看看哪款最适合你!
  19. Sklearn中predict_proba函数用法及原理详解
  20. 生产过程监控没有你想象那么难!

热门文章

  1. 第六章 三大消息摘要算法总结
  2. STM32的同步规则模式使用
  3. Objective-C征途:Hello Objective-C
  4. C# 调用 Delphi Dll链接库方法及示例
  5. 序1--年轻正当时(特权)
  6. 利用Asp.net中的AJAX制作网页上自动选取开始日期及结束日期的用户自定义控件...
  7. lr中winsock协议的脚本(转载51testing)
  8. 洛谷P2463 Sandy的卡片【后缀数组】【二分】
  9. 使用ASP.NET广告控件的XML语言创建广告链接--ASP.NET
  10. Python面向对象学习 1 (什么是面向对象,面向对象的应用场景,待更新)