using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.Filters; using Swashbuckle.AspNetCore.SwaggerGen; using Swashbuckle.AspNetCore.SwaggerUI; using System; using System.IO; using System.Linq; using System.Reflection; namespace IRaCIS.Core.API { public class SwaggerConfigure { public static void ConfigureSwagger(IServiceCollection services) { services.AddSwaggerGen(options => { //此处的Name 是控制器上分组的名称 Title是界面的大标题 //分组 options.SwaggerDoc("Reviewer", new OpenApiInfo {Title = "医生模块",Version = "Reviewer", }); options.SwaggerDoc("Trial", new OpenApiInfo { Title = "项目模块", Version = "Trial" }); options.SwaggerDoc("Enroll", new OpenApiInfo { Title = "入组模块", Version = "Enroll" }); options.SwaggerDoc("Workload", new OpenApiInfo { Title = "工作量模块", Version = "Workload" }); options.SwaggerDoc("Common", new OpenApiInfo { Title = "通用信息获取", Version = "Common" }); options.SwaggerDoc("Institution", new OpenApiInfo { Title = "机构信息模块", Version = "Institution" }); 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" }); // 接口排序 options.OrderActionsBy(o => o.GroupName); options.DocInclusionPredicate((docName, apiDes) => { if (!apiDes.TryGetMethodInfo(out MethodInfo methodInfo)) return false; var versions = methodInfo.DeclaringType.GetCustomAttributes(true) .OfType() .Select(attr => attr.GroupName); return versions.Any(v => v.ToString() == docName); }); var xmlPath = Path.Combine(AppContext.BaseDirectory, "IRaCIS.Core.API.xml");//这个就是刚刚配置的xml文件名 options.IncludeXmlComments(xmlPath, true); //默认的第二个参数是false,这个是controller的注释,记得修改 // 在header中添加token,传递到后台 options.OperationFilter(); // Bearer options.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme { Description = "JWT Authorization header using the Bearer scheme.", Name = "Authorization", In = ParameterLocation.Header, Scheme = "bearer", Type = SecuritySchemeType.Http, BearerFormat = "JWT" }); }); } public static void Configure(IApplicationBuilder app, IWebHostEnvironment env) { 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; //DocExpansion设置为none可折叠所有方法 options.DocExpansion(DocExpansion.None); //DefaultModelsExpandDepth设置为 - 1 可不显示models options.DefaultModelsExpandDepth(-1); }); } } }