Files
Yi.Admin/Yi.Framework.Net6/Yi.Framework.WebCore/MiddlewareExtend/SwaggerExtension.cs

125 lines
4.8 KiB
C#
Raw Normal View History

2021-11-04 15:15:00 +08:00
using IGeekFan.AspNetCore.Knife4jUI;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Mvc.Controllers;
2021-10-12 16:52:28 +08:00
using Microsoft.Extensions.DependencyInjection;
using Microsoft.OpenApi.Models;
using System;
using System.IO;
2021-10-20 18:03:43 +08:00
using Yi.Framework.Common.Models;
2021-10-12 16:52:28 +08:00
namespace Yi.Framework.WebCore.MiddlewareExtend
{
/// <summary>
/// Swagger扩展
/// </summary>
public static class SwaggerExtension
{
2021-10-20 18:03:43 +08:00
public static IServiceCollection AddSwaggerService<Program>(this IServiceCollection services, string title = "Yi意框架-API接口")
2021-10-12 16:52:28 +08:00
{
var apiInfo = new OpenApiInfo
{
2021-10-20 18:03:43 +08:00
Title = title,
2021-10-12 16:52:28 +08:00
Version = "v1",
Contact = new OpenApiContact { Name = "橙子", Email = "454313500@qq.com", Url = new System.Uri("https://ccnetcore.com") }
};
#region Swagger服务
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", apiInfo);
//添加注释服务
//为 Swagger JSON and UI设置xml文档注释路径
//获取应用程序所在目录(绝对路径不受工作目录影响建议采用此方法获取路径使用windwos&Linux
var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);
2021-10-13 15:40:56 +08:00
var apiXmlPath = Path.Combine(basePath, @"SwaggerDoc.xml");//控制器层注释
//var entityXmlPath = Path.Combine(basePath, @"SwaggerDoc.xml");//实体注释
2021-10-12 16:52:28 +08:00
//c.IncludeXmlComments(apiXmlPath, true);//true表示显示控制器注释
2021-11-04 15:15:00 +08:00
c.IncludeXmlComments(apiXmlPath,true);
2021-10-12 16:52:28 +08:00
//添加控制器注释
//c.DocumentFilter<SwaggerDocTag>();
//添加header验证信息
//c.OperationFilter<SwaggerHeader>();
//var security = new Dictionary<string, IEnumerable<string>> { { "Bearer", new string[] { } }, };
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()
{
Description = "文本框里输入从服务器获取的Token。格式为Bearer + 空格+token",//JWT授权(数据将在请求头中进行传输) 参数结构: \"Authorization: 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>() }
});
2021-11-04 15:15:00 +08:00
2022-04-16 00:16:32 +08:00
//c.AddServer(new OpenApiServer()
//{
// Url = "https://ccnetcore.com",
// Description = "Yi-Framework"
//});
//c.CustomOperationIds(apiDesc =>
//{
// var controllerAction = apiDesc.ActionDescriptor as ControllerActionDescriptor;
// return controllerAction.ActionName;
//});
2021-10-12 16:52:28 +08:00
});
#endregion
return services;
}
2021-10-20 18:03:43 +08:00
public static void UseSwaggerService(this IApplicationBuilder app, params SwaggerModel[] swaggerModels)
2021-10-12 16:52:28 +08:00
{
//在 Startup.Configure 方法中,启用中间件为生成的 JSON 文档和 Swagger UI 提供服务:
// Enable middleware to serve generated Swagger as a JSON endpoint.
app.UseSwagger();
2021-11-04 15:15:00 +08:00
2022-04-16 00:16:32 +08:00
//app.UseKnife4UI(c =>
2021-11-04 15:15:00 +08:00
//{
2022-04-16 00:16:32 +08:00
// c.RoutePrefix = "swagger"; // serve the UI at root
2021-11-04 15:15:00 +08:00
// if (swaggerModels.Length == 0)
// {
2022-04-16 00:16:32 +08:00
// c.SwaggerEndpoint("/v1/swagger.json", "Yi.Framework");
2021-11-04 15:15:00 +08:00
// }
// else
// {
// foreach (var k in swaggerModels)
// {
// c.SwaggerEndpoint(k.url, k.name);
// }
// }
2022-04-16 00:16:32 +08:00
//});
app.UseSwaggerUI(c =>
{
if (swaggerModels.Length == 0)
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Yi.Framework");
}
else
{
foreach (var k in swaggerModels)
{
c.SwaggerEndpoint(k.url, k.name);
}
}
2021-10-20 18:03:43 +08:00
2022-04-16 00:16:32 +08:00
}
2021-10-20 18:03:43 +08:00
2022-04-16 00:16:32 +08:00
);
2021-10-12 16:52:28 +08:00
}
}
}