.NET6之MiniAPI(十八):OpenAPI swagger
從本篇開(kāi)始,介紹一些很不錯(cuò)的三方庫(kù),來(lái)豐富MiniAPI的使用。
在創(chuàng)建MiniAPI項(xiàng)目時(shí),模板提供了一個(gè)是否啟用OpenAPI的選項(xiàng),足見(jiàn)這個(gè)三方庫(kù)的優(yōu)勢(shì)和強(qiáng)大。
OpenAPI為我們測(cè)試API提供了強(qiáng)大的支持,調(diào)用API的開(kāi)發(fā)人員,可以輕松測(cè)試,參照開(kāi)發(fā)接口和接口參數(shù),有效的節(jié)省了大量文檔的書(shū)寫(xiě)和調(diào)試流程復(fù)雜性。
為了更好的說(shuō)明,需要開(kāi)啟注釋文件生成功能,打開(kāi)項(xiàng)目文件,增加GenerateDocumentdationFile節(jié)點(diǎn)即可。
先看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"});//設(shè)置xml引用var filePath = Path.Combine(System.AppContext.BaseDirectory, "MiniAPI08.xml");c.IncludeXmlComments(filePath);//添加授權(quán)var schemeName = "Bearer";c.AddSecurityDefinition(schemeName, new OpenApiSecurityScheme{In = ParameterLocation.Header,Description = "請(qǐng)輸入不帶有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> /// 提交數(shù)據(jù) /// </summary> class Data {/// <summary>/// 編號(hào) /// </summary>public int Id { get; set; }/// <summary>/// 名稱/// </summary>public string Name { get; set; } }Tags?是all test,可以把同類操作放在一個(gè)組里,對(duì)應(yīng)著swagger的一組
現(xiàn)在的MiniAPI對(duì)單個(gè)請(qǐng)求還不支持注釋(就是get ,post,put,delete的api注釋),相信.NET 7會(huì)解決掉。
如果請(qǐng)求的方法是匿名方法,同樣參數(shù)也是不支持說(shuō)明的,如果像delete請(qǐng)求,指像命名方法,方法的參數(shù)是注釋說(shuō)明是會(huì)顯示在swagger里的:
如查Mini API支持Token驗(yàn)證,可以通過(guò)AddSwaggerGen添加Security來(lái)實(shí)現(xiàn)自帶Token,具體做法見(jiàn)代碼實(shí)現(xiàn):c.AddSecurityDefinition和 c.AddSecurityRequirement。這樣可以在Swagger頁(yè)面,點(diǎn)擊Authorize按鈕,輸入Token,這時(shí),所有的請(qǐng)求都會(huì)帶上Authorization的header。
調(diào)用Get方法時(shí),會(huì)自動(dòng)帶上Authorization
后端會(huì)獲取到Token數(shù)據(jù)
總結(jié)
以上是生活随笔為你收集整理的.NET6之MiniAPI(十八):OpenAPI swagger的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 使用 System.Net.Http.J
- 下一篇: 堪比JMeter的.Net压测工具 -