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.ComponentModel; using System.IO; using System.Linq; using System.Reflection; namespace IRaCIS.Core.API; public enum SwaggerVersion { [Description("文件记录")] FileRecord = -1, [Description("医生模块")] Reviewer = 1, [Description("项目模块")] Trial = 2, [Description("入组模块")] Enroll = 3, [Description("工作量模块")] Workload = 4, [Description("通用信息获取")] Common = 5, [Description("机构信息模块")] Institution = 6, [Description("统计模块")] DashboardStatistics = 7, [Description("财务模块")] Financial = 8, [Description("管理模块")] Management =9, [Description("影像模块")] Image =10, [Description("读片模块")] Reading =11 }; public static class SwaggerSetup { public static void AddSwaggerSetup(this IServiceCollection services) { services.AddEndpointsApiExplorer(); services.AddSwaggerGen(options => { typeof(SwaggerVersion).GetFields(BindingFlags.Public | BindingFlags.Static).ToList() .ForEach(field => { var description = field.GetCustomAttribute()?.Description ?? field.Name; options.SwaggerDoc(field.Name, new Microsoft.OpenApi.Models.OpenApiInfo { Version = field.Name, Description = $"{field.Name} API", Title = description // 使用Description作为Title }); }); // 接口排序 options.OrderActionsBy(o => o.GroupName); //添加注释 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); // 在header中添加token,传递到后台 options.OperationFilter(); // 添加登录按钮 options.AddSecurityDefinition("bearerAuth", new OpenApiSecurityScheme() { Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", Name = "Authorization", //In = "header", //Type = "apiKey" }); }); } public static void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseSwagger(); app.UseSwaggerUI(options => { typeof(SwaggerVersion).GetFields(BindingFlags.Public | BindingFlags.Static).ToList() .ForEach(field => { var description = field.GetCustomAttribute()?.Description ?? field.Name; 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; //DocExpansion设置为none可折叠所有方法 options.DocExpansion(DocExpansion.None); //DefaultModelsExpandDepth设置为 - 1 可不显示models options.DefaultModelsExpandDepth(-1); }); } }