You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.2 KiB
70 lines
2.2 KiB
using Microsoft.OpenApi.Models;
|
|
using Swashbuckle.AspNetCore.Filters;
|
|
|
|
namespace Tiobon.Core.Gateway.Extensions;
|
|
|
|
public static class CustomSwaggerSetup
|
|
{
|
|
public static void AddCustomSwaggerSetup(this IServiceCollection services)
|
|
{
|
|
if (services == null) throw new ArgumentNullException(nameof(services));
|
|
|
|
var basePath = AppContext.BaseDirectory;
|
|
|
|
services.AddMvc(option => option.EnableEndpointRouting = false);
|
|
|
|
services.AddSwaggerGen(c =>
|
|
{
|
|
c.SwaggerDoc("v1", new OpenApiInfo
|
|
{
|
|
Version = "v1",
|
|
Title = "自定义网关 接口文档",
|
|
});
|
|
|
|
var xmlPath = Path.Combine(basePath, "Tiobon.Core.Gateway.xml");
|
|
c.IncludeXmlComments(xmlPath, true);
|
|
|
|
c.OperationFilter<AddResponseHeadersFilter>();
|
|
c.OperationFilter<AppendAuthorizeToSummaryOperationFilter>();
|
|
|
|
c.OperationFilter<SecurityRequirementsOperationFilter>();
|
|
|
|
c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
|
|
{
|
|
Description = "JWT授权(数据将在请求头中进行传输) 直接在下框中输入Bearer {token}(注意两者之间是一个空格)\"",
|
|
Name = "Authorization",
|
|
In = ParameterLocation.Header,
|
|
Type = SecuritySchemeType.ApiKey
|
|
});
|
|
});
|
|
}
|
|
|
|
public static void UseCustomSwaggerMildd(this IApplicationBuilder app, Func<Stream> streamHtml)
|
|
{
|
|
if (app == null) throw new ArgumentNullException(nameof(app));
|
|
|
|
var apis = new List<string> { "Tiobon-svc" };
|
|
app.UseSwagger();
|
|
app.UseSwaggerUI(c =>
|
|
{
|
|
c.SwaggerEndpoint($"/swagger/v1/swagger.json", "gateway");
|
|
apis.ForEach(m =>
|
|
{
|
|
c.SwaggerEndpoint($"/swagger/apiswg/{m}/swagger.json", m);
|
|
});
|
|
|
|
|
|
if (streamHtml.Invoke() == null)
|
|
{
|
|
var msg = "index.html的属性,必须设置为嵌入的资源";
|
|
throw new Exception(msg);
|
|
}
|
|
|
|
c.IndexStream = streamHtml;
|
|
|
|
c.RoutePrefix = "";
|
|
});
|
|
}
|
|
|
|
|
|
}
|
|
|