using LearningOfficer.OA.Mobile.Api.Filters; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Microsoft.OpenApi.Models; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Threading.Tasks; namespace YuanXuan.IM.Api.CollectionExtensions { public static class SwaggerServiceCollectionExtensions { /// /// Swagger注入 /// /// public static void AddSwagger(this IServiceCollection services) { services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "OA移动端Api", Version = "v1" }); // v2 文档 c.SwaggerDoc("v2", new OpenApiInfo { Title = "OA移动端Api", Version = "v2" }); // v3 文档 c.SwaggerDoc("v3", new OpenApiInfo { Title = "OA移动端Api", Version = "v3" }); c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme() { Description = "在下框中输入请求头中需要添加Jwt授权Token:Bearer {Token},注意中间有空格", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.ApiKey, BearerFormat = "JWT", Scheme = "Bearer" }); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, new string[] { } } }); c.SupportNonNullableReferenceTypes(); c.ParameterFilter(); // 获取主项目生成的 XML 文件路径 var mainXmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var mainXmlPath = Path.Combine(AppContext.BaseDirectory, mainXmlFile); c.IncludeXmlComments(mainXmlPath, includeControllerXmlComments: true); // 获取所有引用的类库 XML 文件路径 var referencedAssemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies(); foreach (var assemblyName in referencedAssemblies) { var libraryXmlPath = Path.Combine(AppContext.BaseDirectory, $"{assemblyName.Name}.xml"); if (File.Exists(libraryXmlPath)) { c.IncludeXmlComments(libraryXmlPath); } } }); } } }