.NET6之MiniAPI(十八):OpenAPI swagger

发布一下 0 0

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

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

.NET6之MiniAPI(十八):OpenAPI swagger

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

.NET6之MiniAPI(十八):OpenAPI swagger

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

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

.NET6之MiniAPI(十八):OpenAPI swagger


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

.NET6之MiniAPI(十八):OpenAPI swagger

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

.NET6之MiniAPI(十八):OpenAPI swagger

后端会获取到Token数据

.NET6之MiniAPI(十八):OpenAPI swagger

版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除

本文地址:http://0561fc.cn/73040.html