1. 程式人生 > 其它 >.Net5 Core 配置 Swagger 簡單的給WebApi分組

.Net5 Core 配置 Swagger 簡單的給WebApi分組

Startup.cs下ConfigureServices程式碼

services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "基礎", Version = "v1" });
c.SwaggerDoc("v2", new OpenApiInfo { Title = "業務", Version = "v2" });
//c.DocInclusionPredicate((docName, description) => true);
c.DocInclusionPredicate((docName, apiDesc) =>
{
if(!apiDesc.TryGetMethodInfo(out MethodInfo menthodInfo)) return false;


var versions = menthodInfo.DeclaringType.GetCustomAttributes(true).OfType<ApiExplorerSettingsAttribute>().Select(attr => attr.GroupName);
if (docName.ToLower() == "v1" && versions.FirstOrDefault() == null)
{
return true;//若不使用[ApiExplorerSettings(GroupName= "GroupName")] api將在V1顯示。

}
return versions.Any(v=>v.ToString()==docName);
});
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Description = "JWT授權(資料將在請求頭中進行傳輸) 在下方輸入Bearer {token} 即可,注意兩者之間有空格",
Name = "Authorization",//jwt預設的引數名稱
In =ParameterLocation.Header,//jwt預設存放Authorization資訊的位置(請求頭中)
Type =SecuritySchemeType.ApiKey
});
//認證方式,此方式為全域性新增
c.AddSecurityRequirement(new OpenApiSecurityRequirement {

{ new OpenApiSecurityScheme
{
Reference = new OpenApiReference()
{
Id = "Bearer",
Type = ReferenceType.SecurityScheme
}
}, Array.Empty<string>() }
});

});

Startup.cs下Configure程式碼

app.UseSwagger(c=>
{
c.RouteTemplate = "swagger/{documentName}/swagger.json";
});
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v2/swagger.json", "業務");
c.SwaggerEndpoint("/swagger/v1/swagger.json", "基礎");

}) ;

給Controllers或Action新增[ApiExplorerSettings(GroupName= "ApiGroupName")]

namespace XX.Controllers
{
[Authorize()]
[Route("api/[controller]")]
[ApiController]
[ApiExplorerSettings(GroupName = "v2")]
public class DataTreeController : Controller
{
private DataTreeService _datatreeService = null;

最終效果如下: