当前位置 : 主页 > 网络编程 > net编程 >

.NET6之MiniAPI(十八):OpenAPI swagger

来源:互联网 收集:自由互联 发布时间:2023-09-06
从本篇开始,介绍一些很不错的三方库,来丰富MiniAPI的使用。 在创建MiniAPI项目时,模板提供了一个是否启用OpenAPI的选项,足见这个三方库的优势和强大。 OpenAPI为我们测试API提供了强

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

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

.NET6之MiniAPI(十八):OpenAPI swagger_xml

  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_microsoft_02

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

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

.NET6之MiniAPI(十八):OpenAPI swagger_microsoft_03

 

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

.NET6之MiniAPI(十八):OpenAPI swagger_microsoft_04

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

.NET6之MiniAPI(十八):OpenAPI swagger_.net_05

 后端会获取到Token数据

.NET6之MiniAPI(十八):OpenAPI swagger_xml_06

  想要更快更方便的了解相关知识,可以关注微信公众号 

.NET6之MiniAPI(十八):OpenAPI swagger_xml_07

 

 

【转自:建湖网页制作公司 http://www.1234xp.com/jianhu.html 欢迎留下您的宝贵建议】
上一篇:Struts2配置文件讲解
下一篇:没有了
网友评论