0
0
Răsfoiți Sursa

新增 支持通过网关访问微服务文档

zhontai 2 ani în urmă
părinte
comite
f4ea6284a5

+ 1 - 1
build/pkg.props

@@ -1,6 +1,6 @@
 <Project>
   <PropertyGroup>
-    <Version>2.2.22</Version>
+    <Version>2.2.23</Version>
 	<TargetFramework>net6.0</TargetFramework>
 	<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
 	<GenerateDocumentationFile>true</GenerateDocumentationFile>

+ 3 - 1
src/hosts/ZhonTai.Host/Configs/appconfig.json

@@ -22,6 +22,7 @@
   "swagger": {
     //启用
     "enable": true,
+    //路由前缀,如配置微服务文档地址:doc/module/swagger
     "routePrefix": "swagger",
     //地址
     "url": "http://localhost:8000",
@@ -37,7 +38,8 @@
   //ZhonTai接口文档
   "apiUI": {
     //启用
-    "enable": true,
+    "enable": false,
+    //路由前缀,如配置微服务文档地址:doc/module
     "routePrefix": "",
     //页脚
     "footer": {

+ 11 - 8
src/hosts/ZhonTai.Host/Program.cs

@@ -1,6 +1,8 @@
 using FreeScheduler;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Hosting;
+using System.IO;
+using ZhonTai;
 using ZhonTai.Admin.Core;
 using ZhonTai.Admin.Core.Configs;
 using ZhonTai.Admin.Core.Startup;
@@ -46,14 +48,15 @@ new HostApp(new HostAppOptions
 		#region 新版Api文档
 		if (env.IsDevelopment() || appConfig.ApiUI.Enable)
 		{
-			app.UseApiUI(options =>
-			{
-				options.RoutePrefix = appConfig.ApiUI.RoutePrefix;
-				appConfig.Swagger.Projects?.ForEach(project =>
-				{
-					options.SwaggerEndpoint($"/swagger/{project.Code.ToLower()}/swagger.json", project.Name);
-				});
-			});
+            app.UseApiUI(options =>
+            {
+                options.RoutePrefix = appConfig.ApiUI.RoutePrefix;
+                var routePath = options.RoutePrefix.NotNull() ? $"{options.RoutePrefix}/" : "";
+                appConfig.Swagger.Projects?.ForEach(project =>
+                {
+                    options.SwaggerEndpoint($"/{routePath}swagger/{project.Code.ToLower()}/swagger.json", project.Name);
+                });
+            });
 		}
 		#endregion
 	}

+ 1 - 1
src/hosts/ZhonTai.Host/Properties/launchSettings.json

@@ -11,7 +11,7 @@
       "commandName": "Project",
       "launchBrowser": true,
       "dotnetRunMessages": true,
-      //"launchUrl": "swagger",
+      "launchUrl": "",
       "environmentVariables": {
         "ASPNETCORE_ENVIRONMENT": "Development"
       },

+ 6 - 2
src/platform/ZhonTai.Admin/Core/Configs/AppConfig.cs

@@ -1,4 +1,5 @@
 using System.Collections.Generic;
+using System.Text.RegularExpressions;
 
 namespace ZhonTai.Admin.Core.Configs;
 
@@ -95,10 +96,11 @@ public class SwaggerConfig
     /// </summary>
     public bool Enable { get; set; } = false;
 
+    private string _RoutePrefix = "swagger";
     /// <summary>
     /// 访问地址
     /// </summary>
-    public string RoutePrefix { get; set; } = "swagger";
+    public string RoutePrefix { get => Regex.Replace(_RoutePrefix, "^\\/+|\\/+$", ""); set => _RoutePrefix = value; }
 
     /// <summary>
     /// 地址
@@ -121,10 +123,12 @@ public class ApiUIConfig
     /// </summary>
     public bool Enable { get; set; } = false;
 
+
+    private string _RoutePrefix="";
     /// <summary>
     /// 访问地址
     /// </summary>
-    public string RoutePrefix { get; set; } = "";
+    public string RoutePrefix { get => Regex.Replace(_RoutePrefix, "^\\/+|\\/+$", ""); set => _RoutePrefix = value; }
 
     public SwaggerFooterConfig Footer { get; set; } = new SwaggerFooterConfig();
 }

+ 18 - 10
src/platform/ZhonTai.Admin/Core/HostApp.cs

@@ -47,7 +47,6 @@ using Microsoft.AspNetCore.Mvc;
 using ZhonTai.Admin.Core.Startup;
 using ZhonTai.Admin.Core.Conventions;
 using FreeSql;
-using ZhonTai.Admin.Core.Db.Transaction;
 using ZhonTai.Admin.Services.User;
 
 namespace ZhonTai.Admin.Core;
@@ -599,21 +598,30 @@ public class HostApp
         #region Swagger Api文档
         if (env.IsDevelopment() || appConfig.Swagger.Enable)
         {
-            app.UseSwagger();
-            app.UseSwaggerUI(c =>
+            var routePrefix = appConfig.ApiUI.RoutePrefix;
+            if (!appConfig.ApiUI.Enable && routePrefix.IsNull())
             {
+                routePrefix = appConfig.Swagger.RoutePrefix;
+            }
+            var routePath = routePrefix.NotNull() ? $"{routePrefix}/" : "";
+            app.UseSwagger(optoins =>
+            {
+                optoins.RouteTemplate = routePath + optoins.RouteTemplate;
+            });
+            app.UseSwaggerUI(options =>
+            {
+                options.RoutePrefix = appConfig.Swagger.RoutePrefix;
                 appConfig.Swagger.Projects?.ForEach(project =>
                 {
-                    c.SwaggerEndpoint($"/swagger/{project.Code.ToLower()}/swagger.json", project.Name);
+                    options.SwaggerEndpoint($"/{routePath}swagger/{project.Code.ToLower()}/swagger.json", project.Name);
                 });
-
-                c.RoutePrefix = appConfig.Swagger.RoutePrefix; ;//直接根目录访问,如果是IIS发布可以注释该语句,并打开launchSettings.launchUrl
-                c.DocExpansion(Swashbuckle.AspNetCore.SwaggerUI.DocExpansion.None);//折叠Api
-                //c.DefaultModelsExpandDepth(-1);//不显示Models
+                
+                options.DocExpansion(Swashbuckle.AspNetCore.SwaggerUI.DocExpansion.None);//折叠Api
+                //options.DefaultModelsExpandDepth(-1);//不显示Models
                 if (appConfig.MiniProfiler)
                 {
-                    c.InjectJavascript("/swagger/mini-profiler.js?v=4.2.22+2.0");
-                    c.InjectStylesheet("/swagger/mini-profiler.css?v=4.2.22+2.0");
+                    options.InjectJavascript("/swagger/mini-profiler.js?v=4.2.22+2.0");
+                    options.InjectStylesheet("/swagger/mini-profiler.css?v=4.2.22+2.0");
                 }
             });
         }

+ 1 - 1
src/platform/ZhonTai.ApiUI/ApiUIMiddleware.cs

@@ -73,7 +73,7 @@ namespace ZhonTai.ApiUI
                 return;
             }
 
-            if (httpMethod == "GET" && Regex.IsMatch(path, $"^/swagger-resources$", RegexOptions.IgnoreCase))
+            if (httpMethod == "GET" && Regex.IsMatch(path, $"^/{Regex.Escape(_options.RoutePrefix)}/?swagger-resources$", RegexOptions.IgnoreCase))
             {
                 await RespondWithConfig(httpContext.Response);
                 return;

+ 1 - 1
src/platform/ZhonTai.ApiUI/src/dist/index.html

@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title></title><link href="knife4jui/css/chunk-05a85274.7eb4e04b.css" rel="prefetch"><link href="knife4jui/js/chunk-05a85274.38639815.js" rel="prefetch"><link href="knife4jui/js/chunk-0fd67716.dedd1f18.js" rel="prefetch"><link href="knife4jui/js/chunk-214218f0.1477d149.js" rel="prefetch"><link href="knife4jui/js/chunk-2d0af44e.253e38c5.js" rel="prefetch"><link href="knife4jui/js/chunk-2d0bd799.5f382a56.js" rel="prefetch"><link href="knife4jui/js/chunk-2d0d0b98.aa691f1e.js" rel="prefetch"><link href="knife4jui/js/chunk-2d0da532.691f8fe5.js" rel="prefetch"><link href="knife4jui/js/chunk-2d22269d.efda169e.js" rel="prefetch"><link href="knife4jui/js/chunk-3b888a65.74410f20.js" rel="prefetch"><link href="knife4jui/js/chunk-589faee0.e4761e71.js" rel="prefetch"><link href="knife4jui/js/chunk-735c675c.2f71526f.js" rel="prefetch"><link href="knife4jui/js/chunk-adb9e944.5a9e3009.js" rel="prefetch"><link href="knife4jui/js/chunk-cc2402ee.7bab1230.js" rel="prefetch"><link href="knife4jui/css/app.723af817.css" rel="preload" as="style"><link href="knife4jui/css/chunk-vendors.f24a310a.css" rel="preload" as="style"><link href="knife4jui/js/app.a8106010.js" rel="preload" as="script"><link href="knife4jui/js/chunk-vendors.692a1ca5.js" rel="preload" as="script"><link href="knife4jui/css/chunk-vendors.f24a310a.css" rel="stylesheet"><link href="knife4jui/css/app.723af817.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but knife4j-vue doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="knife4jui/js/chunk-vendors.692a1ca5.js"></script><script src="knife4jui/js/app.a8106010.js"></script></body></html>
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title></title><link href="knife4jui/css/chunk-05a85274.7eb4e04b.css" rel="prefetch"><link href="knife4jui/js/chunk-05a85274.38639815.js" rel="prefetch"><link href="knife4jui/js/chunk-0fd67716.dedd1f18.js" rel="prefetch"><link href="knife4jui/js/chunk-214218f0.1477d149.js" rel="prefetch"><link href="knife4jui/js/chunk-2d0af44e.253e38c5.js" rel="prefetch"><link href="knife4jui/js/chunk-2d0bd799.5f382a56.js" rel="prefetch"><link href="knife4jui/js/chunk-2d0d0b98.aa691f1e.js" rel="prefetch"><link href="knife4jui/js/chunk-2d0da532.691f8fe5.js" rel="prefetch"><link href="knife4jui/js/chunk-2d22269d.efda169e.js" rel="prefetch"><link href="knife4jui/js/chunk-3b888a65.74410f20.js" rel="prefetch"><link href="knife4jui/js/chunk-589faee0.e4761e71.js" rel="prefetch"><link href="knife4jui/js/chunk-735c675c.2f71526f.js" rel="prefetch"><link href="knife4jui/js/chunk-adb9e944.5a9e3009.js" rel="prefetch"><link href="knife4jui/js/chunk-cc2402ee.7bab1230.js" rel="prefetch"><link href="knife4jui/css/app.723af817.css" rel="preload" as="style"><link href="knife4jui/css/chunk-vendors.f24a310a.css" rel="preload" as="style"><link href="knife4jui/js/app.89bf2c34.js" rel="preload" as="script"><link href="knife4jui/js/chunk-vendors.692a1ca5.js" rel="preload" as="script"><link href="knife4jui/css/chunk-vendors.f24a310a.css" rel="stylesheet"><link href="knife4jui/css/app.723af817.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but knife4j-vue doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="knife4jui/js/chunk-vendors.692a1ca5.js"></script><script src="knife4jui/js/app.89bf2c34.js"></script></body></html>

Fișier diff suprimat deoarece este prea mare
+ 0 - 0
src/platform/ZhonTai.ApiUI/src/dist/knife4jui/js/app.89bf2c34.js


BIN
src/platform/ZhonTai.ApiUI/src/dist/knife4jui/js/app.89bf2c34.js.gz


BIN
src/platform/ZhonTai.ApiUI/src/dist/knife4jui/js/app.a8106010.js.gz


+ 3 - 1
src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/Knife4jAsync.js

@@ -357,8 +357,10 @@ SwaggerBootstrapUi.prototype.analysisGroup = function () {
       };
       this.desktopCode=code;
     }
+    var path = window.location.pathname.replace('index.html','').replace(/^\/+|\/+$/g,'')
+    path = path ? (path+'/') : ''
     that.ajax({
-      url: that.url,
+      url: path + that.url,
       type: 'get',
       timeout: 20000,
       dataType: 'json',

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff