| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- using System.Reflection;
- using System.Text;
- using Abp.Extensions;
- using Microsoft.AspNetCore.Builder;
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.OpenApi.Models;
- using Swashbuckle.AspNetCore.SwaggerUI;
- using VberZero.Configuration;
- namespace VberAdmin.Swagger
- {
- public static class SwaggerExtensions
- {
- private static string _apiVersion = "v1";
- /// <summary>
- /// 将 ABP 基础 URI 注入 index.html 页面
- /// </summary>
- /// <param name="options"></param>
- /// <param name="pathBase">base path (URL) to application API</param>
- public static void InjectBaseUrl(this SwaggerUIOptions options, string pathBase)
- {
- pathBase = pathBase.EnsureEndsWith('/');
- options.HeadContent = new StringBuilder(options.HeadContent)
- .AppendLine($"<script> var abp = abp || {{}}; abp.appPath = abp.appPath || '{pathBase}'; </script>")
- .ToString();
- }
- /// <summary>
- /// 在 Configure 方法中启用此行和相关行以启用 swagger UI
- /// </summary>
- /// <param name="services"></param>
- /// <param name="env"></param>
- public static void ConfigureSwagger(this IServiceCollection services, IWebHostEnvironment env)
- {
- var appConfiguration = env.GetAppConfiguration();
- services.AddSwaggerGen(options =>
- {
- options.SwaggerDoc(_apiVersion, new OpenApiInfo
- {
- Version = _apiVersion,
- Title = "VberAdmin API",
- Description = "VberAdmin",
- // uncomment if needed TermsOfService = new Uri("https://example.com/terms"),
- //Contact = new OpenApiContact
- //{
- // Name = "VberAdmin",
- // Email = string.Empty,
- // Url = new Uri("https://twitter.com/aspboilerplate"),
- //},
- //License = new OpenApiLicense
- //{
- // Name = "MIT License",
- // Url = new Uri("https://github.com/aspnetboilerplate/aspnetboilerplate/blob/dev/LICENSE"),
- //}
- });
- options.DocInclusionPredicate((docName, description) => true);
- // 定义正在使用的 BearerAuth 方案
- options.AddSecurityDefinition("bearerAuth", new OpenApiSecurityScheme()
- {
- Description =
- "使用 Bearer 方案的 JWT 授权标头。 例子: \"Authorization: Bearer {token}\"",
- Name = "Authorization",
- In = ParameterLocation.Header,
- Type = SecuritySchemeType.ApiKey
- });
- options.AddSecurityRequirement(new OpenApiSecurityRequirement
- {
- {
- new OpenApiSecurityScheme
- {
- Reference = new OpenApiReference {
- Type = ReferenceType.SecurityScheme,
- Id = "bearerAuth"
- }
- },
- new string[] { }
- }
- });
- //添加摘要
- bool canShowSummaries = appConfiguration.GetValue<bool>("Swagger:ShowSummaries");
- if (canShowSummaries)
- {
- var hostXmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
- var hostXmlPath = Path.Combine(env.ContentRootPath, hostXmlFile);
- options.IncludeXmlComments(hostXmlPath);
- var applicationXml = $"VberAdmin.Application.xml";
- var applicationXmlPath = Path.Combine(env.ContentRootPath, applicationXml);
- options.IncludeXmlComments(applicationXmlPath);
- var webCoreXmlFile = $"VberAdmin.Web.Core.xml";
- var webCoreXmlPath = Path.Combine(env.ContentRootPath, webCoreXmlFile);
- options.IncludeXmlComments(webCoreXmlPath);
- }
- options.ParameterFilter<SwaggerEnumParameterFilter>();
- options.SchemaFilter<SwaggerEnumSchemaFilter>();
- options.OperationFilter<SwaggerOperationIdFilter>();
- options.OperationFilter<SwaggerOperationFilter>();
- options.DocumentFilter<CustomDocFilter>();
- });
- }
- public static void Use_SwaggerUI(this IApplicationBuilder app, Assembly assembly, string namespaceStr = "VberAdmin.Web.Mvc")
- {
- //启用中间件以将生成的 Swagger 作为 JSON 端点提供服务
- app.UseSwagger(c => { c.RouteTemplate = "doc/{documentName}/api.json"; });
- // 启用中间件以提供 swagger-ui 资产(HTML、JS、CSS 等)
- app.UseSwaggerUI(options =>
- {
- options.DocumentTitle = "API-系统管理平台";
- options.DocExpansion(DocExpansion.None);//设置为none可折叠所有方法
- options.DefaultModelsExpandDepth(-1); //设置为 -1 可不显示models
- options.RoutePrefix = "doc";//配置后,你的最终访问路径就就是 /doc/index.html 否则 /swagger;
- options.SwaggerEndpoint($"/doc/{_apiVersion}/api.json", $"VberAdmin API {_apiVersion}");
- options.IndexStream = () => assembly.GetManifestResourceStream($"{namespaceStr}.wwwroot.swagger.ui.index.html");
- options.DisplayRequestDuration(); // Controls the display of the request duration (in milliseconds) for "Try it out" requests.
- }); // URL: /doc
- }
- }
- }
|