swagger 整理
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
a81f05dcc7
commit
827615f272
|
@ -243,7 +243,7 @@ app.UseLogDashboard("/LogDashboard");
|
||||||
app.UseHangfireConfig(env);
|
app.UseHangfireConfig(env);
|
||||||
|
|
||||||
// Swagger
|
// Swagger
|
||||||
SwaggerSetup.ConfigureOld(app, env);
|
SwaggerSetup.Configure(app, env);
|
||||||
|
|
||||||
//serilog 记录请求的用户信息
|
//serilog 记录请求的用户信息
|
||||||
app.UseSerilogConfig(env);
|
app.UseSerilogConfig(env);
|
||||||
|
|
|
@ -49,24 +49,17 @@ public static class SwaggerSetup
|
||||||
|
|
||||||
services.AddSwaggerGen(options =>
|
services.AddSwaggerGen(options =>
|
||||||
{
|
{
|
||||||
//此处的Name 是控制器上分组的名称 Title是界面的大标题
|
typeof(SwaggerVersion).GetFields(BindingFlags.Public | BindingFlags.Static).ToList()
|
||||||
//分组
|
.ForEach(field =>
|
||||||
|
{
|
||||||
options.SwaggerDoc("Reviewer", new OpenApiInfo { Title = "医生模块", Version = "Reviewer", });
|
var description = field.GetCustomAttribute<DescriptionAttribute>()?.Description ?? field.Name;
|
||||||
options.SwaggerDoc("Trial", new OpenApiInfo { Title = "项目模块", Version = "Trial" });
|
options.SwaggerDoc(field.Name, new Microsoft.OpenApi.Models.OpenApiInfo
|
||||||
options.SwaggerDoc("Enroll", new OpenApiInfo { Title = "入组模块", Version = "Enroll" });
|
{
|
||||||
options.SwaggerDoc("Workload", new OpenApiInfo { Title = "工作量模块", Version = "Workload" });
|
Version = field.Name,
|
||||||
options.SwaggerDoc("Common", new OpenApiInfo { Title = "通用信息获取", Version = "Common" });
|
Description = $"{field.Name} API",
|
||||||
options.SwaggerDoc("Institution", new OpenApiInfo { Title = "机构信息模块", Version = "Institution" });
|
Title = description // 使用Description作为Title
|
||||||
options.SwaggerDoc("Dashboard&Statistics", new OpenApiInfo { Title = "统计模块", Version = "Dashboard&Statistics" });
|
});
|
||||||
|
});
|
||||||
options.SwaggerDoc("Financial", new OpenApiInfo { Title = "财务模块", Version = "Financial" });
|
|
||||||
options.SwaggerDoc("Management", new OpenApiInfo { Title = "管理模块", Version = "Management" });
|
|
||||||
options.SwaggerDoc("Image", new OpenApiInfo { Title = "影像模块", Version = "Image" });
|
|
||||||
options.SwaggerDoc("Reading", new OpenApiInfo { Title = "读片模块", Version = "Reading" });
|
|
||||||
|
|
||||||
// Add "General" fallback group for ungrouped APIs
|
|
||||||
//options.SwaggerDoc("General", new OpenApiInfo { Title = "未分类模块", Version = "General" });
|
|
||||||
|
|
||||||
// 接口排序
|
// 接口排序
|
||||||
options.OrderActionsBy(o => o.GroupName);
|
options.OrderActionsBy(o => o.GroupName);
|
||||||
|
@ -78,19 +71,9 @@ public static class SwaggerSetup
|
||||||
.OfType<ApiExplorerSettingsAttribute>()
|
.OfType<ApiExplorerSettingsAttribute>()
|
||||||
.Select(attr => attr.GroupName);
|
.Select(attr => attr.GroupName);
|
||||||
|
|
||||||
//return versions.Any(v => v == docName) || (docName == "General" && !versions.Any());
|
|
||||||
return versions.Any(v => v.ToString() == docName);
|
return versions.Any(v => v.ToString() == docName);
|
||||||
});
|
});
|
||||||
|
|
||||||
var xmlPath = Path.Combine(AppContext.BaseDirectory, "IRaCIS.Core.API.xml");//这个就是刚刚配置的xml文件名
|
|
||||||
options.IncludeXmlComments(xmlPath, true);
|
|
||||||
|
|
||||||
var xmlPath2 = Path.Combine(AppContext.BaseDirectory, "IRaCIS.Core.Application.xml");//这个就是刚刚配置的xml文件名
|
|
||||||
options.IncludeXmlComments(xmlPath2, true);
|
|
||||||
//默认的第二个参数是false,这个是controller的注释,记得修改
|
|
||||||
|
|
||||||
|
|
||||||
// 在header中添加token,传递到后台
|
|
||||||
options.OperationFilter<SecurityRequirementsOperationFilter>();
|
options.OperationFilter<SecurityRequirementsOperationFilter>();
|
||||||
|
|
||||||
|
|
||||||
|
@ -104,86 +87,33 @@ public static class SwaggerSetup
|
||||||
//Type = "apiKey"
|
//Type = "apiKey"
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//添加注释
|
||||||
|
var basePath = AppContext.BaseDirectory;
|
||||||
|
var xmlPath1 = Path.Combine(basePath, "IRaCIS.Core.Application.xml");
|
||||||
|
var xmlPath2 = Path.Combine(basePath, "IRaCIS.Core.API.xml");
|
||||||
|
options.IncludeXmlComments(xmlPath1, true);
|
||||||
|
options.IncludeXmlComments(xmlPath2, true);
|
||||||
|
|
||||||
//// Bearer
|
// 在header中添加token,传递到后台
|
||||||
//options.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
|
options.OperationFilter<SecurityRequirementsOperationFilter>();
|
||||||
|
|
||||||
|
|
||||||
|
//// 添加登录按钮
|
||||||
|
//options.AddSecurityDefinition("bearerAuth", new OpenApiSecurityScheme()
|
||||||
//{
|
//{
|
||||||
// Description = "JWT Authorization header using the Bearer scheme.",
|
// Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
|
||||||
// Name = "Authorization",
|
// Name = "Authorization",
|
||||||
// In = ParameterLocation.Header,
|
|
||||||
// Scheme = "bearer",
|
// //In = "header",
|
||||||
// Type = SecuritySchemeType.Http,
|
// //Type = "apiKey"
|
||||||
// BearerFormat = "JWT"
|
|
||||||
//});
|
//});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ConfigureOld(IApplicationBuilder app, IWebHostEnvironment env)
|
|
||||||
{
|
|
||||||
app.UseDeveloperExceptionPage();
|
|
||||||
app.UseSwagger();
|
|
||||||
app.UseSwaggerUI(options =>
|
|
||||||
{
|
|
||||||
//此处的Name 是页面 选择文档下拉框 显示的名称
|
|
||||||
options.SwaggerEndpoint($"swagger/Reviewer/swagger.json", "医生模块");
|
|
||||||
options.SwaggerEndpoint($"swagger/Trial/swagger.json", "项目模块");
|
|
||||||
options.SwaggerEndpoint($"swagger/Enroll/swagger.json", "入组模块");
|
|
||||||
options.SwaggerEndpoint($"swagger/Workload/swagger.json", "工作量模块");
|
|
||||||
options.SwaggerEndpoint($"swagger/Dashboard&Statistics/swagger.json", "统计模块");
|
|
||||||
options.SwaggerEndpoint($"swagger/Common/swagger.json", "通用模块");
|
|
||||||
|
|
||||||
options.SwaggerEndpoint($"swagger/Financial/swagger.json", "财务模块");
|
|
||||||
options.SwaggerEndpoint($"swagger/Institution/swagger.json", "机构信息模块");
|
|
||||||
options.SwaggerEndpoint($"swagger/Management/swagger.json", "管理模块");
|
|
||||||
options.SwaggerEndpoint($"swagger/Image/swagger.json", "影像模块");
|
|
||||||
options.SwaggerEndpoint($"swagger/Reading/swagger.json", "读片模块");
|
|
||||||
|
|
||||||
|
|
||||||
//路径配置,设置为空,表示直接在根域名(localhost:8001)访问该文件,
|
|
||||||
//注意localhost:8001/swagger是访问不到的,去launchSettings.json把launchUrl去掉,如果你想换一个路径,直接写名字即可,比如直接写c.Route = "doc";
|
|
||||||
//options.RoutePrefix = string.Empty;
|
|
||||||
|
|
||||||
var data = Assembly.GetExecutingAssembly().Location;
|
|
||||||
options.IndexStream = () => Assembly.GetExecutingAssembly()
|
|
||||||
.GetManifestResourceStream("IRaCIS.Core.API.wwwroot.swagger.ui.Index.html");
|
|
||||||
|
|
||||||
options.RoutePrefix = string.Empty;
|
|
||||||
|
|
||||||
//DocExpansion设置为none可折叠所有方法
|
|
||||||
options.DocExpansion(DocExpansion.None);
|
|
||||||
//DefaultModelsExpandDepth设置为 - 1 可不显示models
|
|
||||||
options.DefaultModelsExpandDepth(-1);
|
|
||||||
|
|
||||||
|
|
||||||
// 引入静态文件添加登录功能
|
|
||||||
// 清除静态文件缓存
|
|
||||||
// options.IndexStream = () => null;
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static void AddSwaggerSetup(this IServiceCollection services)
|
public static void AddSwaggerSetup(this IServiceCollection services)
|
||||||
{
|
{
|
||||||
services.AddEndpointsApiExplorer();
|
services.AddEndpointsApiExplorer();
|
||||||
services.AddSwaggerGen(options =>
|
services.AddSwaggerGen(options =>
|
||||||
{
|
{
|
||||||
//多版本
|
|
||||||
#region old
|
|
||||||
//typeof(SwaggerVersion).GetEnumNames().ToList().ForEach(v =>
|
|
||||||
//{
|
|
||||||
// options.SwaggerDoc(v, new Microsoft.OpenApi.Models.OpenApiInfo
|
|
||||||
// {
|
|
||||||
// Version = v,
|
|
||||||
// Description = $"{v} API",
|
|
||||||
// Title = v,
|
|
||||||
// });
|
|
||||||
|
|
||||||
//});
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
typeof(SwaggerVersion).GetFields(BindingFlags.Public | BindingFlags.Static).ToList()
|
typeof(SwaggerVersion).GetFields(BindingFlags.Public | BindingFlags.Static).ToList()
|
||||||
.ForEach(field =>
|
.ForEach(field =>
|
||||||
|
@ -197,6 +127,32 @@ public static class SwaggerSetup
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 接口排序
|
||||||
|
options.OrderActionsBy(o => o.GroupName);
|
||||||
|
|
||||||
|
options.DocInclusionPredicate((docName, apiDes) =>
|
||||||
|
{
|
||||||
|
if (!apiDes.TryGetMethodInfo(out MethodInfo methodInfo)) return false;
|
||||||
|
var versions = methodInfo.DeclaringType.GetCustomAttributes(true)
|
||||||
|
.OfType<ApiExplorerSettingsAttribute>()
|
||||||
|
.Select(attr => attr.GroupName);
|
||||||
|
|
||||||
|
return versions.Any(v => v.ToString() == docName);
|
||||||
|
});
|
||||||
|
|
||||||
|
options.OperationFilter<SecurityRequirementsOperationFilter>();
|
||||||
|
|
||||||
|
|
||||||
|
// 添加登录按钮
|
||||||
|
options.AddSecurityDefinition("bearerAuth", new OpenApiSecurityScheme()
|
||||||
|
{
|
||||||
|
Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
|
||||||
|
Name = "Authorization",
|
||||||
|
|
||||||
|
//In = "header",
|
||||||
|
//Type = "apiKey"
|
||||||
|
});
|
||||||
|
|
||||||
//添加注释
|
//添加注释
|
||||||
var basePath = AppContext.BaseDirectory;
|
var basePath = AppContext.BaseDirectory;
|
||||||
var xmlPath1 = Path.Combine(basePath, "IRaCIS.Core.Application.xml");
|
var xmlPath1 = Path.Combine(basePath, "IRaCIS.Core.Application.xml");
|
||||||
|
@ -220,17 +176,13 @@ public static class SwaggerSetup
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
|
public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
|
||||||
{
|
{
|
||||||
app.UseSwagger();
|
app.UseSwagger();
|
||||||
app.UseSwaggerUI(options =>
|
app.UseSwaggerUI(options =>
|
||||||
{
|
{
|
||||||
//typeof(SwaggerVersion).GetEnumNames().ToList().ForEach(v =>
|
|
||||||
//{
|
|
||||||
// options.SwaggerEndpoint($"swagger/{v}/swagger.json", $"{v}");
|
|
||||||
|
|
||||||
//});
|
|
||||||
|
|
||||||
typeof(SwaggerVersion).GetFields(BindingFlags.Public | BindingFlags.Static).ToList()
|
typeof(SwaggerVersion).GetFields(BindingFlags.Public | BindingFlags.Static).ToList()
|
||||||
.ForEach(field =>
|
.ForEach(field =>
|
||||||
{
|
{
|
||||||
|
@ -238,18 +190,28 @@ public static class SwaggerSetup
|
||||||
options.SwaggerEndpoint($"swagger/{field.Name}/swagger.json", $"{description}");
|
options.SwaggerEndpoint($"swagger/{field.Name}/swagger.json", $"{description}");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
var data = Assembly.GetExecutingAssembly().Location;
|
||||||
|
options.IndexStream = () => Assembly.GetExecutingAssembly()
|
||||||
|
.GetManifestResourceStream("IRaCIS.Core.API.wwwroot.swagger.ui.Index.html");
|
||||||
|
|
||||||
|
//路径配置,设置为空,表示直接在根域名(localhost:8001)访问该文件,
|
||||||
|
//注意localhost:8001/swagger是访问不到的,去launchSettings.json把launchUrl去掉,如果你想换一个路径,直接写名字即可,比如直接写c.Route = "doc";
|
||||||
|
options.RoutePrefix = string.Empty;
|
||||||
options.RoutePrefix = string.Empty;
|
options.RoutePrefix = string.Empty;
|
||||||
|
|
||||||
//var data = Assembly.GetExecutingAssembly().Location;
|
|
||||||
//options.IndexStream = () => Assembly.GetExecutingAssembly()
|
|
||||||
//.GetManifestResourceStream("IRaCIS.Core.API.wwwroot.swagger.ui.Index.html");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//DocExpansion设置为none可折叠所有方法
|
//DocExpansion设置为none可折叠所有方法
|
||||||
options.DocExpansion(DocExpansion.None);
|
options.DocExpansion(DocExpansion.None);
|
||||||
|
|
||||||
//DefaultModelsExpandDepth设置为 - 1 可不显示models
|
//DefaultModelsExpandDepth设置为 - 1 可不显示models
|
||||||
options.DefaultModelsExpandDepth(-1);
|
options.DefaultModelsExpandDepth(-1);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue