From 3cc7d2b85daabb6e23ff19c4e2017dd8eed45bfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=85=86=E9=91=AB?= Date: Sat, 1 Nov 2025 23:30:58 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E7=BD=91=E5=85=B3=E7=BB=A7=E6=89=BF?= =?UTF-8?q?=E5=BE=AE=E6=9C=8D=E5=8A=A1Swagger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KonSoft.sln.DotSettings | 1 + .../AppConfigurationAggregation.cs | 91 +++ .../AppConfigurationCachedService.cs | 9 + .../AppConfigurationRemoteService.cs | 13 + .../AppConfigurationRequest.cs | 8 + .../IAppConfigurationAggregation.cs | 10 + .../IAppConfigurationRemoteService.cs | 6 + .../Base/AggregateRemoteServiceBase.cs | 103 +++ .../Aggregations/Base/AggregateServiceBase.cs | 30 + .../Aggregations/Base/CachedServiceBase.cs | 39 ++ .../Base/IAggregateRemoteService.cs | 8 + .../Aggregations/Base/ICachedServiceBase.cs | 7 + .../Aggregations/Base/IRequestInput.cs | 6 + .../Localization/ILocalizationAggregation.cs | 10 + .../ILocalizationRemoteService.cs | 6 + .../Localization/LocalizationAggregation.cs | 69 ++ .../Localization/LocalizationCachedService.cs | 9 + .../Localization/LocalizationRemoteService.cs | 18 + .../Localization/LocalizationRequest.cs | 14 + .../InternalGatewayModule.cs | 70 ++ .../KonSoft.InternalGateway.http | 6 - gateways/KonSoft.InternalGateway/Program.cs | 26 +- .../Properties/launchSettings.json | 41 +- .../ReverseProxyBuilderExtensions.cs | 109 +++ .../KonSoft.InternalGateway/appsettings.json | 3 +- .../KonSoft.Admin.HttpApi.Host/Logs/logs.txt | 640 ++++++++++++++++++ .../AbpHostingHostBuilderExtensions.cs | 27 + .../KonSoft.Shared.Hosting.Gateways.csproj | 2 + .../KonSoftSharedHostingGatewaysModule.cs | 11 + .../YarpSwaggerUIBuilderExtensions.cs | 61 ++ 30 files changed, 1385 insertions(+), 68 deletions(-) create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/AppConfigurationAggregation.cs create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/AppConfigurationCachedService.cs create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/AppConfigurationRemoteService.cs create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/AppConfigurationRequest.cs create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/IAppConfigurationAggregation.cs create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/IAppConfigurationRemoteService.cs create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/Base/AggregateRemoteServiceBase.cs create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/Base/AggregateServiceBase.cs create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/Base/CachedServiceBase.cs create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/Base/IAggregateRemoteService.cs create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/Base/ICachedServiceBase.cs create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/Base/IRequestInput.cs create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/Localization/ILocalizationAggregation.cs create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/Localization/ILocalizationRemoteService.cs create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/Localization/LocalizationAggregation.cs create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/Localization/LocalizationCachedService.cs create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/Localization/LocalizationRemoteService.cs create mode 100644 gateways/KonSoft.InternalGateway/Aggregations/Localization/LocalizationRequest.cs delete mode 100644 gateways/KonSoft.InternalGateway/KonSoft.InternalGateway.http create mode 100644 gateways/KonSoft.InternalGateway/ReverseProxyBuilderExtensions.cs create mode 100644 shared/KonSoft.Shared.Hosting.Gateways/AbpHostingHostBuilderExtensions.cs create mode 100644 shared/KonSoft.Shared.Hosting.Gateways/YarpSwaggerUIBuilderExtensions.cs diff --git a/KonSoft.sln.DotSettings b/KonSoft.sln.DotSettings index c044e41..9495510 100644 --- a/KonSoft.sln.DotSettings +++ b/KonSoft.sln.DotSettings @@ -22,4 +22,5 @@ SQL True True + True \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/AppConfigurationAggregation.cs b/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/AppConfigurationAggregation.cs new file mode 100644 index 0000000..8cff5c1 --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/AppConfigurationAggregation.cs @@ -0,0 +1,91 @@ +using KonSoft.InternalGateway.Aggregations.Base; +using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; +using Volo.Abp.DependencyInjection; + +namespace KonSoft.InternalGateway.Aggregations.ApplicationConfiguration; + +public class AppConfigurationAggregation : AggregateServiceBase, + IAppConfigurationAggregation, ITransientDependency +{ + public string AppConfigRouteName => "EshopOnAbpApplicationConfiguration"; + public string AppConfigEndpoint => "api/abp/application-configuration"; + + protected IAppConfigurationRemoteService AppConfigurationRemoteService { get; } + + public AppConfigurationAggregation( + IAppConfigurationRemoteService appConfigurationRemoteService) : base( + appConfigurationRemoteService) + { + AppConfigurationRemoteService = appConfigurationRemoteService; + } + + public async Task GetAppConfigurationAsync(AppConfigurationRequest input) + { + var remoteAppConfigurationResults = + await AppConfigurationRemoteService.GetMultipleAsync(input.Endpoints); + + //merge only application configuration settings data + var mergedResult = MergeAppConfigurationSettingsData(remoteAppConfigurationResults); + + //return result + return mergedResult; + } + + private static ApplicationConfigurationDto MergeAppConfigurationSettingsData( + IDictionary appConfigurations) + { + var appConfigurationDto = CreateInitialAppConfigDto(appConfigurations); + + foreach (var (_, appConfig) in appConfigurations) + { + foreach (var resource in appConfig.Setting.Values) + { + appConfigurationDto.Setting.Values.TryAdd(resource.Key, resource.Value); + } + } + + return appConfigurationDto; + } + + /// + /// Checks "Administration" clusterId to set the initial data from the AdministrationService. + /// Otherwise uses the first available service for the initial application configuration data + /// + /// + /// + private static ApplicationConfigurationDto CreateInitialAppConfigDto( + IDictionary appConfigurations + ) + { + if (appConfigurations.Count == 0) + { + return new ApplicationConfigurationDto(); + } + + if (appConfigurations.TryGetValue("Administration_AppConfig", out var administrationServiceData)) + { + return MapServiceData(administrationServiceData); + } + + return MapServiceData(appConfigurations.First().Value); + } + + private static ApplicationConfigurationDto MapServiceData(ApplicationConfigurationDto appConfiguration) + { + return new ApplicationConfigurationDto + { + Localization = appConfiguration.Localization, + Auth = appConfiguration.Auth, + Clock = appConfiguration.Clock, + Setting = appConfiguration.Setting, + Features = appConfiguration.Features, + Timing = appConfiguration.Timing, + CurrentTenant = appConfiguration.CurrentTenant, + CurrentUser = appConfiguration.CurrentUser, + ExtraProperties = appConfiguration.ExtraProperties, + GlobalFeatures = appConfiguration.GlobalFeatures, + MultiTenancy = appConfiguration.MultiTenancy, + ObjectExtensions = appConfiguration.ObjectExtensions + }; + } +} \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/AppConfigurationCachedService.cs b/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/AppConfigurationCachedService.cs new file mode 100644 index 0000000..327a686 --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/AppConfigurationCachedService.cs @@ -0,0 +1,9 @@ +using KonSoft.InternalGateway.Aggregations.Base; +using Microsoft.Extensions.Caching.Memory; +using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; +using Volo.Abp.DependencyInjection; + +namespace KonSoft.InternalGateway.Aggregations.ApplicationConfiguration; + +public class AppConfigurationCachedService(IMemoryCache applicationConfigurationCache) + : CachedServiceBase(applicationConfigurationCache), ISingletonDependency; \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/AppConfigurationRemoteService.cs b/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/AppConfigurationRemoteService.cs new file mode 100644 index 0000000..adae9a0 --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/AppConfigurationRemoteService.cs @@ -0,0 +1,13 @@ +using KonSoft.InternalGateway.Aggregations.Base; +using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Json; + +namespace KonSoft.InternalGateway.Aggregations.ApplicationConfiguration; + +public class AppConfigurationRemoteService( + IHttpContextAccessor httpContextAccessor, + IJsonSerializer jsonSerializer, + ILogger> logger) + : AggregateRemoteServiceBase(httpContextAccessor, jsonSerializer, logger), + IAppConfigurationRemoteService, ITransientDependency; \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/AppConfigurationRequest.cs b/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/AppConfigurationRequest.cs new file mode 100644 index 0000000..ae6e8ed --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/AppConfigurationRequest.cs @@ -0,0 +1,8 @@ +using KonSoft.InternalGateway.Aggregations.Base; + +namespace KonSoft.InternalGateway.Aggregations.ApplicationConfiguration; + +public class AppConfigurationRequest : IRequestInput +{ + public Dictionary Endpoints { get; } = new(); +} \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/IAppConfigurationAggregation.cs b/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/IAppConfigurationAggregation.cs new file mode 100644 index 0000000..4956d8c --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/IAppConfigurationAggregation.cs @@ -0,0 +1,10 @@ +using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; + +namespace KonSoft.InternalGateway.Aggregations.ApplicationConfiguration; + +public interface IAppConfigurationAggregation +{ + string AppConfigRouteName { get; } + string AppConfigEndpoint { get; } + Task GetAppConfigurationAsync(AppConfigurationRequest input); +} \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/IAppConfigurationRemoteService.cs b/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/IAppConfigurationRemoteService.cs new file mode 100644 index 0000000..ade1b4d --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/ApplicationConfiguration/IAppConfigurationRemoteService.cs @@ -0,0 +1,6 @@ +using KonSoft.InternalGateway.Aggregations.Base; +using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; + +namespace KonSoft.InternalGateway.Aggregations.ApplicationConfiguration; + +public interface IAppConfigurationRemoteService : IAggregateRemoteService; \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/Base/AggregateRemoteServiceBase.cs b/gateways/KonSoft.InternalGateway/Aggregations/Base/AggregateRemoteServiceBase.cs new file mode 100644 index 0000000..b89b9a5 --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/Base/AggregateRemoteServiceBase.cs @@ -0,0 +1,103 @@ +using Volo.Abp.Json; + +namespace KonSoft.InternalGateway.Aggregations.Base; + +public abstract class AggregateRemoteServiceBase : IAggregateRemoteService +{ + private readonly IHttpContextAccessor _httpContextAccessor; + private readonly ILogger> _logger; + protected IJsonSerializer JsonSerializer { get; } + + protected AggregateRemoteServiceBase(IHttpContextAccessor httpContextAccessor, IJsonSerializer jsonSerializer, + ILogger> logger) + { + _httpContextAccessor = httpContextAccessor; + JsonSerializer = jsonSerializer; + _logger = logger; + } + + public async Task> GetMultipleAsync( + Dictionary serviceNameWithUrlDictionary) + { + Dictionary> completedTasks = new Dictionary>(); + Dictionary> runningTasks = new Dictionary>(); + Dictionary completedResult = new Dictionary(); + + using (HttpClient httpClient = CreateHttpClient()) + { + foreach (var service in serviceNameWithUrlDictionary) + { + Task requestTask = + MakeRequestAsync(httpClient, service.Value); + runningTasks.Add(service.Key, requestTask); + } + + while (runningTasks.Count > 0) + { + KeyValuePair> completedTask = await WaitForAnyTaskAsync(runningTasks); + + runningTasks.Remove(completedTask.Key); + + try + { + TDto result = await completedTask.Value; + + completedTasks.Add(completedTask.Key, completedTask.Value); + completedResult.Add(completedTask.Key, result); + + _logger.LogInformation("Localization Key: {0}, Value: {1}", completedTask.Key, result); + } + catch (Exception ex) + { + _logger.LogInformation("Error for the {0}: {1}", completedTask.Key, ex.Message); + } + } + } + + return completedResult; + } + + private HttpClient CreateHttpClient() + { + var httpClient = new HttpClient(); + + var headers = _httpContextAccessor.HttpContext?.Request.Headers; + if (headers != null) + { + foreach (var header in headers) + { + httpClient.DefaultRequestHeaders.Add(header.Key, header.Value.ToArray()); + } + } + + return httpClient; + } + + public async Task MakeRequestAsync(HttpClient httpClient, string url) + { + try + { + HttpResponseMessage response = await httpClient.GetAsync(url); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync(); + return JsonSerializer.Deserialize(content); + } + catch (Exception e) + { + _logger.LogInformation("Error making request to {0}: {1}", url, e.Message); + throw; + } + } + + public async Task>> WaitForAnyTaskAsync( + Dictionary> tasks) + { + var completedTask = Task.WhenAny(tasks.Values); + var result = await completedTask; + + var completedTaskPair = tasks.First(kv => kv.Value == result); + + return completedTaskPair; + } +} \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/Base/AggregateServiceBase.cs b/gateways/KonSoft.InternalGateway/Aggregations/Base/AggregateServiceBase.cs new file mode 100644 index 0000000..116e531 --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/Base/AggregateServiceBase.cs @@ -0,0 +1,30 @@ +namespace KonSoft.InternalGateway.Aggregations.Base; + +public abstract class AggregateServiceBase +{ + private readonly IAggregateRemoteService _remoteService; + + public AggregateServiceBase(IAggregateRemoteService remoteService) + { + _remoteService = remoteService; + } + + public virtual async Task> GetMultipleFromRemoteAsync(List missingKeys, + Dictionary endpoints) + { + return await _remoteService + .GetMultipleAsync(endpoints + .Where(kv => missingKeys.Contains(kv.Key)) + .ToDictionary(k => k.Key, v => v.Value)); + } + + public List GetMissingServiceKeys( + IDictionary serviceNamesWithData, + Dictionary serviceNamesWithUrls) + { + List missingKeysInCache = serviceNamesWithUrls.Keys.Except(serviceNamesWithData.Keys).ToList(); + List missingKeysInUrls = serviceNamesWithData.Keys.Except(serviceNamesWithUrls.Keys).ToList(); + + return missingKeysInCache.Concat(missingKeysInUrls).ToList(); + } +} \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/Base/CachedServiceBase.cs b/gateways/KonSoft.InternalGateway/Aggregations/Base/CachedServiceBase.cs new file mode 100644 index 0000000..d7fa387 --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/Base/CachedServiceBase.cs @@ -0,0 +1,39 @@ +using Microsoft.Extensions.Caching.Memory; + +namespace KonSoft.InternalGateway.Aggregations.Base; + +public abstract class CachedServiceBase : ICachedServiceBase +{ + private readonly IMemoryCache _cache; + + protected MemoryCacheEntryOptions CacheEntryOptions { get; } = new() + { + AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(24), + SlidingExpiration = TimeSpan.FromHours(4) + }; + + protected CachedServiceBase(IMemoryCache cache) + { + _cache = cache ?? throw new ArgumentNullException(nameof(cache)); + } + + public void Add(string serviceName, TCacheValue data) + { + _cache.Set(serviceName, data, CacheEntryOptions); + } + + public IDictionary GetManyAsync(IEnumerable serviceNames) + { + var result = new Dictionary(); + + foreach (var serviceName in serviceNames) + { + if (_cache.TryGetValue(serviceName, out TCacheValue data)) + { + result.Add(serviceName, data); + } + } + + return result; + } +} \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/Base/IAggregateRemoteService.cs b/gateways/KonSoft.InternalGateway/Aggregations/Base/IAggregateRemoteService.cs new file mode 100644 index 0000000..bf57ca6 --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/Base/IAggregateRemoteService.cs @@ -0,0 +1,8 @@ +namespace KonSoft.InternalGateway.Aggregations.Base; + +public interface IAggregateRemoteService +{ + Task> GetMultipleAsync(Dictionary serviceNameWithUrlDictionary); + Task MakeRequestAsync(HttpClient httpClient, string url); + Task>> WaitForAnyTaskAsync(Dictionary> tasks); +} \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/Base/ICachedServiceBase.cs b/gateways/KonSoft.InternalGateway/Aggregations/Base/ICachedServiceBase.cs new file mode 100644 index 0000000..82c78aa --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/Base/ICachedServiceBase.cs @@ -0,0 +1,7 @@ +namespace KonSoft.InternalGateway.Aggregations.Base; + +public interface ICachedServiceBase +{ + void Add(string serviceName, TValue data); + IDictionary GetManyAsync(IEnumerable serviceNames); +} \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/Base/IRequestInput.cs b/gateways/KonSoft.InternalGateway/Aggregations/Base/IRequestInput.cs new file mode 100644 index 0000000..b76c233 --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/Base/IRequestInput.cs @@ -0,0 +1,6 @@ +namespace KonSoft.InternalGateway.Aggregations.Base; + +public interface IRequestInput +{ + Dictionary Endpoints { get; } +} \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/Localization/ILocalizationAggregation.cs b/gateways/KonSoft.InternalGateway/Aggregations/Localization/ILocalizationAggregation.cs new file mode 100644 index 0000000..27ae2f5 --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/Localization/ILocalizationAggregation.cs @@ -0,0 +1,10 @@ +using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; + +namespace KonSoft.InternalGateway.Aggregations.Localization; + +public interface ILocalizationAggregation +{ + string LocalizationRouteName { get; } + string LocalizationEndpoint { get; } + Task GetLocalizationAsync(LocalizationRequest input); +} \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/Localization/ILocalizationRemoteService.cs b/gateways/KonSoft.InternalGateway/Aggregations/Localization/ILocalizationRemoteService.cs new file mode 100644 index 0000000..28a1e0a --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/Localization/ILocalizationRemoteService.cs @@ -0,0 +1,6 @@ +using KonSoft.InternalGateway.Aggregations.Base; +using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; + +namespace KonSoft.InternalGateway.Aggregations.Localization; + +public interface ILocalizationRemoteService : IAggregateRemoteService; \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/Localization/LocalizationAggregation.cs b/gateways/KonSoft.InternalGateway/Aggregations/Localization/LocalizationAggregation.cs new file mode 100644 index 0000000..bccd587 --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/Localization/LocalizationAggregation.cs @@ -0,0 +1,69 @@ +using KonSoft.InternalGateway.Aggregations.Base; +using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; +using Volo.Abp.DependencyInjection; + +namespace KonSoft.InternalGateway.Aggregations.Localization; + +public class LocalizationAggregation : AggregateServiceBase, ILocalizationAggregation, + ITransientDependency +{ + public string LocalizationRouteName => "EshopOnAbpLocalization"; + public string LocalizationEndpoint => "api/abp/application-localization"; + protected LocalizationCachedService LocalizationCachedService { get; } + + public LocalizationAggregation( + LocalizationCachedService localizationCachedService, + ILocalizationRemoteService localizationRemoteService) + : base(localizationRemoteService) + { + LocalizationCachedService = localizationCachedService; + } + + public async Task GetLocalizationAsync(LocalizationRequest input) + { + // Check the cache service + var cachedLocalization = LocalizationCachedService + .GetManyAsync(input.Endpoints.Keys.ToArray()); + + // Compare cache with input service list + var missingLocalizationKeys = GetMissingServiceKeys(cachedLocalization, input.Endpoints); + + if (missingLocalizationKeys.Count != 0) + { + // Make request to remote localization service to get missing localizations + var remoteLocalizationResults = + await GetMultipleFromRemoteAsync(missingLocalizationKeys, input.Endpoints); + + // Update localization cache + foreach (var result in remoteLocalizationResults) + { + LocalizationCachedService.Add(result.Key, result.Value); + } + + cachedLocalization = LocalizationCachedService + .GetManyAsync(input.Endpoints.Keys.ToArray()); + } + + //merge result + var mergedResult = MergeLocalizationData(cachedLocalization); + + //return result + return mergedResult; + } + + private static ApplicationLocalizationDto MergeLocalizationData( + IDictionary resourceDictionary) + { + var localizationDto = new ApplicationLocalizationDto(); + + foreach (var localization in resourceDictionary) + { + foreach (var resource in localization.Value.Resources) + { + localizationDto.Resources.TryAdd(resource.Key, resource.Value); + } + } + + return localizationDto; + } +} \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/Localization/LocalizationCachedService.cs b/gateways/KonSoft.InternalGateway/Aggregations/Localization/LocalizationCachedService.cs new file mode 100644 index 0000000..25b4a65 --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/Localization/LocalizationCachedService.cs @@ -0,0 +1,9 @@ +using KonSoft.InternalGateway.Aggregations.Base; +using Microsoft.Extensions.Caching.Memory; +using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; +using Volo.Abp.DependencyInjection; + +namespace KonSoft.InternalGateway.Aggregations.Localization; + +public class LocalizationCachedService(IMemoryCache localizationCache) + : CachedServiceBase(localizationCache), ISingletonDependency; \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/Localization/LocalizationRemoteService.cs b/gateways/KonSoft.InternalGateway/Aggregations/Localization/LocalizationRemoteService.cs new file mode 100644 index 0000000..7316c2d --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/Localization/LocalizationRemoteService.cs @@ -0,0 +1,18 @@ +using KonSoft.InternalGateway.Aggregations.Base; +using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Json; + +namespace KonSoft.InternalGateway.Aggregations.Localization; + +public class LocalizationRemoteService : AggregateRemoteServiceBase, + ILocalizationRemoteService, ITransientDependency +{ + public LocalizationRemoteService( + IHttpContextAccessor httpContextAccessor, + IJsonSerializer jsonSerializer, + ILogger> logger) + : base(httpContextAccessor, jsonSerializer, logger) + { + } +} \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Aggregations/Localization/LocalizationRequest.cs b/gateways/KonSoft.InternalGateway/Aggregations/Localization/LocalizationRequest.cs new file mode 100644 index 0000000..3ec91f6 --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Aggregations/Localization/LocalizationRequest.cs @@ -0,0 +1,14 @@ +using KonSoft.InternalGateway.Aggregations.Base; + +namespace KonSoft.InternalGateway.Aggregations.Localization; + +public class LocalizationRequest : IRequestInput +{ + public Dictionary Endpoints { get; } = new(); + public string CultureName { get; set; } + + public LocalizationRequest(string cultureName) + { + CultureName = cultureName; + } +} \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/InternalGatewayModule.cs b/gateways/KonSoft.InternalGateway/InternalGatewayModule.cs index 585c29a..c677f13 100644 --- a/gateways/KonSoft.InternalGateway/InternalGatewayModule.cs +++ b/gateways/KonSoft.InternalGateway/InternalGatewayModule.cs @@ -1,5 +1,9 @@ using KonSoft.Admin; +using KonSoft.Shared.Hosting.AspNetCore; using KonSoft.Shared.Hosting.Gateways; +using Microsoft.AspNetCore.Cors; +using Microsoft.AspNetCore.Rewrite; +using Volo.Abp; using Volo.Abp.Modularity; namespace KonSoft.InternalGateway @@ -10,5 +14,71 @@ namespace KonSoft.InternalGateway )] public class InternalGatewayModule : AbpModule { + public override void ConfigureServices(ServiceConfigurationContext context) + { + var configuration = context.Services.GetConfiguration(); + var hostingEnvironment = context.Services.GetHostingEnvironment(); + + SwaggerConfigurationHelper.ConfigureWithOidc( + context: context, + authority: configuration["AuthServer:Authority"]!, + scopes: + [ + "Admin", "Dispatch", "Payment", "Report", "TenantManagement" + ], + apiTitle: "Internal Gateway API", + discoveryEndpoint: configuration["AuthServer:MetadataAddress"] + ); + + context.Services.AddCors(options => + { + options.AddDefaultPolicy(builder => + { + builder + .WithOrigins( + configuration["App:CorsOrigins"]! + .Split(",", StringSplitOptions.RemoveEmptyEntries) + .Select(o => o.Trim().RemovePostFix("/")) + .ToArray() + ) + .WithAbpExposedHeaders() + .SetIsOriginAllowedToAllowWildcardSubdomains() + .AllowAnyHeader() + .AllowAnyMethod() + .AllowCredentials(); + }); + }); + + context.Services.AddMemoryCache(); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var app = context.GetApplicationBuilder(); + var env = context.GetEnvironment(); + + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseCorrelationId(); + app.UseCors(); + app.UseAbpRequestLocalization(); + app.UseStaticFiles(); + app.UseRouting(); + app.UseAuthorization(); + app.UseSwaggerUIWithYarp(context); + app.UseAbpSerilogEnrichers(); + + app.UseRewriter(new RewriteOptions() + // Regex for "", "/" and "" (whitespace) + .AddRedirect("^(|\\|\\s+)$", "/swagger")); + + app.UseEndpoints(endpoints => + { + endpoints.MapReverseProxyWithLocalization(); + }); + } } } diff --git a/gateways/KonSoft.InternalGateway/KonSoft.InternalGateway.http b/gateways/KonSoft.InternalGateway/KonSoft.InternalGateway.http deleted file mode 100644 index 95c5e0b..0000000 --- a/gateways/KonSoft.InternalGateway/KonSoft.InternalGateway.http +++ /dev/null @@ -1,6 +0,0 @@ -@KonSoft.InternalGateway_HostAddress = http://localhost:5090 - -GET {{KonSoft.InternalGateway_HostAddress}}/weatherforecast/ -Accept: application/json - -### diff --git a/gateways/KonSoft.InternalGateway/Program.cs b/gateways/KonSoft.InternalGateway/Program.cs index c929e00..85a050f 100644 --- a/gateways/KonSoft.InternalGateway/Program.cs +++ b/gateways/KonSoft.InternalGateway/Program.cs @@ -1,9 +1,6 @@ using KonSoft.InternalGateway; -using KonSoft.InternalGateway.Extensions; using KonSoft.Shared.Hosting.AspNetCore; -using Microsoft.AspNetCore.Rewrite; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.OpenApi.Models; +using KonSoft.Shared.Hosting.Gateways; using Serilog; var assemblyName = typeof(Program).Assembly.GetName().Name!; @@ -11,6 +8,8 @@ SerilogConfigurationHelper.Configure(assemblyName); try { + Log.Information($"Starting {assemblyName}."); + var builder = WebApplication.CreateBuilder(args); builder.Configuration .AddAgileConfig(option => @@ -19,30 +18,13 @@ try }); builder.Host .AddAppSettingsSecretsJson() + .AddYarpJson() .UseAutofac() .UseSerilog(); - builder.Services.AddAbpSwaggerGenWithOidc(builder.Configuration["AuthServer:Authority"]!, setupAction: options => - { - options.SwaggerDoc("v1", new OpenApiInfo - { - Title = "Gateway", - Version = "v1" - }); - options.DocInclusionPredicate((docName, description) => true); - options.CustomSchemaIds(type => type.FullName); - }); - - - builder.Services.AddReverseProxy() - .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy")); - builder.Services.AddControllers(); await builder.AddApplicationAsync(); var app = builder.Build(); await app.InitializeApplicationAsync(); - app.UseSwaggerUIWithYarp(); - app.MapReverseProxy(); - app.MapGet("/heath", () => "Online"); await app.RunAsync(); return 0; diff --git a/gateways/KonSoft.InternalGateway/Properties/launchSettings.json b/gateways/KonSoft.InternalGateway/Properties/launchSettings.json index ed7fdeb..0d556a1 100644 --- a/gateways/KonSoft.InternalGateway/Properties/launchSettings.json +++ b/gateways/KonSoft.InternalGateway/Properties/launchSettings.json @@ -1,15 +1,5 @@ { "profiles": { - "http": { - "commandName": "Project", - "launchBrowser": true, - "launchUrl": "swagger", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - }, - "dotnetRunMessages": true, - "applicationUrl": "http://localhost:5090" - }, "https": { "commandName": "Project", "launchBrowser": true, @@ -18,35 +8,8 @@ "ASPNETCORE_ENVIRONMENT": "Development" }, "dotnetRunMessages": true, - "applicationUrl": "https://localhost:7264;http://localhost:5090" - }, - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "launchUrl": "swagger", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "Container (Dockerfile)": { - "commandName": "Docker", - "launchBrowser": true, - "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger", - "environmentVariables": { - "ASPNETCORE_HTTPS_PORTS": "8081", - "ASPNETCORE_HTTP_PORTS": "8080" - }, - "publishAllPorts": true, - "useSSL": true + "applicationUrl": "https://localhost:7264" } }, - "$schema": "http://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:15968", - "sslPort": 44395 - } - } + "$schema": "http://json.schemastore.org/launchsettings.json" } \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/ReverseProxyBuilderExtensions.cs b/gateways/KonSoft.InternalGateway/ReverseProxyBuilderExtensions.cs new file mode 100644 index 0000000..66ab69c --- /dev/null +++ b/gateways/KonSoft.InternalGateway/ReverseProxyBuilderExtensions.cs @@ -0,0 +1,109 @@ +using KonSoft.InternalGateway.Aggregations.ApplicationConfiguration; +using KonSoft.InternalGateway.Aggregations.Localization; +using Yarp.ReverseProxy.Configuration; + +namespace KonSoft.InternalGateway +{ + public static class ReverseProxyBuilderExtensions + { + public static ReverseProxyConventionBuilder MapReverseProxyWithLocalization( + this IEndpointRouteBuilder endpoints) + { + return endpoints.MapReverseProxy(proxyBuilder => + { + proxyBuilder.Use(async (context, next) => + { + var endpoint = context.GetEndpoint(); + + var localizationAggregation = context.RequestServices + .GetRequiredService(); + + var appConfigurationAggregation = context.RequestServices + .GetRequiredService(); + + // The "/api/abp/application-localization" endpoint + if (localizationAggregation.LocalizationRouteName == endpoint?.DisplayName) + { + var localizationRequestInput = + CreateLocalizationRequestInput(context, localizationAggregation.LocalizationEndpoint); + + var result = await localizationAggregation.GetLocalizationAsync(localizationRequestInput); + await context.Response.WriteAsJsonAsync(result); + return; + } + + // The "/api/abp/application-configuration" endpoint + if (appConfigurationAggregation.AppConfigRouteName == endpoint?.DisplayName) + { + var appConfigurationRequestInput = + CreateAppConfigurationRequestInput(context, appConfigurationAggregation.AppConfigEndpoint); + + var result = + await appConfigurationAggregation.GetAppConfigurationAsync(appConfigurationRequestInput); + await context.Response.WriteAsJsonAsync(result); + return; + } + + await next(); + }); + + proxyBuilder.UseLoadBalancing(); + }); + } + + private static AppConfigurationRequest CreateAppConfigurationRequestInput(HttpContext context, + string appConfigurationPath) + { + var proxyConfig = context.RequestServices.GetRequiredService(); + + var input = new AppConfigurationRequest(); + string path = $"{appConfigurationPath}?includeLocalizationResources=false"; + + var clusterList = GetClusters(proxyConfig); + foreach (var cluster in clusterList) + { + var hostUrl = new Uri(cluster.Value.Address) + $"{path}"; + // CacheKey/Endpoint dictionary key -> ex: ("Administration_AppConfig") + input.Endpoints.Add($"{cluster.Key}_AppConfig", hostUrl); + } + + return input; + } + + private static LocalizationRequest CreateLocalizationRequestInput(HttpContext context, + string localizationPath) + { + var proxyConfig = context.RequestServices.GetRequiredService(); + + context.Request.Query.TryGetValue("CultureName", out var cultureName); + + var input = new LocalizationRequest(cultureName); + string path = $"{localizationPath}?cultureName={cultureName}&onlyDynamics=false"; + + var clusterList = GetClusters(proxyConfig); + foreach (var cluster in clusterList) + { + var hostUrl = new Uri(cluster.Value.Address) + $"{path}"; + // Endpoint dictionary key -> ex: ("Administration_en") + input.Endpoints.Add($"{cluster.Key}_{cultureName}", hostUrl); + } + + return input; + } + + private static Dictionary GetClusters(IProxyConfigProvider proxyConfig) + { + var yarpConfig = proxyConfig.GetConfig(); + + var routedClusters = yarpConfig.Clusters + .SelectMany(t => t.Destinations, + (clusterId, destination) => new { clusterId.ClusterId, destination.Value }); + + return routedClusters + .GroupBy(q => q.Value.Address) + .Select(t => t.First()) + .Distinct() + .ToDictionary(k => k.ClusterId, v => v.Value); + } + } +} diff --git a/gateways/KonSoft.InternalGateway/appsettings.json b/gateways/KonSoft.InternalGateway/appsettings.json index 5fa4f0d..72118b3 100644 --- a/gateways/KonSoft.InternalGateway/appsettings.json +++ b/gateways/KonSoft.InternalGateway/appsettings.json @@ -8,6 +8,7 @@ "AuthServer": { "Authority": "https://devauth.konsoft.top", "RequireHttpsMetadata": true, - "SwaggerClientId": "Gateway_Swagger" + "SwaggerClientId": "Gateway_Swagger", + "MetadataAddress": "https://devauth.konsoft.top" } } diff --git a/microservices/KonSoft.Admin.HttpApi.Host/Logs/logs.txt b/microservices/KonSoft.Admin.HttpApi.Host/Logs/logs.txt index f108cae..746daa6 100644 --- a/microservices/KonSoft.Admin.HttpApi.Host/Logs/logs.txt +++ b/microservices/KonSoft.Admin.HttpApi.Host/Logs/logs.txt @@ -1163,3 +1163,643 @@ System.InvalidOperationException: An exception has been raised that is likely du 2025-10-26 10:39:21.030 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bundling.AbpAspNetCoreMvcUiBundlingModule 2025-10-26 10:39:21.030 +08:00 [INF] - Volo.Abp.AspNetCore.MultiTenancy.AbpAspNetCoreMultiTenancyModule 2025-10-26 10:39:21.367 +08:00 [DBG] Started background worker: Volo.Abp.OpenIddict.Tokens.TokenCleanupBackgroundWorker +2025-11-01 23:08:03.175 +08:00 [INF] Starting KonSoft.Admin.HttpApi.Host. +2025-11-01 23:08:40.817 +08:00 [INF] Starting KonSoft.Admin.HttpApi.Host. +2025-11-01 23:09:42.918 +08:00 [INF] Starting KonSoft.Admin.HttpApi.Host. +2025-11-01 23:10:34.620 +08:00 [INF] Starting KonSoft.Admin.HttpApi.Host. +2025-11-01 23:10:36.756 +08:00 [INF] Loaded ABP modules: +2025-11-01 23:10:36.757 +08:00 [INF] - KonSoft.Admin.AdminHttpApiHostModule +2025-11-01 23:10:36.757 +08:00 [INF] - KonSoft.Admin.AdminHttpApiModule +2025-11-01 23:10:36.757 +08:00 [INF] - KonSoft.Admin.AdminApplicationContractsModule +2025-11-01 23:10:36.757 +08:00 [INF] - KonSoft.Admin.AdminDomainSharedModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AuditLogging.AbpAuditLoggingDomainSharedModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.BackgroundJobs.AbpBackgroundJobsDomainSharedModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementDomainSharedModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityDomainSharedModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Users.AbpUsersDomainSharedModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.OpenIddict.AbpOpenIddictDomainSharedModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementDomainSharedModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementDomainSharedModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementDomainSharedModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Account.AbpAccountApplicationContractsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityApplicationContractsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Users.AbpUsersAbstractionModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementApplicationContractsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementApplicationContractsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementApplicationContractsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementApplicationContractsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Account.AbpAccountHttpApiModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityHttpApiModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreAbstractionsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.PermissionManagement.HttpApi.AbpPermissionManagementHttpApiModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementHttpApiModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementHttpApiModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementHttpApiModule +2025-11-01 23:10:36.757 +08:00 [INF] - KonSoft.Admin.AdminApplicationModule +2025-11-01 23:10:36.757 +08:00 [INF] - KonSoft.Admin.AdminDomainModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AuditLogging.AbpAuditLoggingDomainModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.BackgroundJobs.AbpBackgroundJobsDomainModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.BackgroundJobs.AbpBackgroundJobsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.BackgroundJobs.AbpBackgroundJobsAbstractionsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AutoMapper.AbpAutoMapperModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementDomainModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityDomainModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Users.AbpUsersDomainModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.OpenIddict.AbpOpenIddictDomainModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.PermissionManagement.OpenIddict.AbpPermissionManagementDomainOpenIddictModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementDomainModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.PermissionManagement.Identity.AbpPermissionManagementDomainIdentityModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementDomainModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementDomainModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Emailing.AbpEmailingModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.TextTemplating.AbpTextTemplatingModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.TextTemplating.Scriban.AbpTextTemplatingScribanModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.TextTemplating.AbpTextTemplatingCoreModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Account.AbpAccountApplicationModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityApplicationModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementApplicationModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementApplicationModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementApplicationModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementApplicationModule +2025-11-01 23:10:36.757 +08:00 [INF] - KonSoft.Admin.EntityFrameworkCore.AdminEntityFrameworkCoreModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Identity.EntityFrameworkCore.AbpIdentityEntityFrameworkCoreModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Users.EntityFrameworkCore.AbpUsersEntityFrameworkCoreModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.EntityFrameworkCore.AbpEntityFrameworkCoreModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.OpenIddict.EntityFrameworkCore.AbpOpenIddictEntityFrameworkCoreModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.PermissionManagement.EntityFrameworkCore.AbpPermissionManagementEntityFrameworkCoreModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.SettingManagement.EntityFrameworkCore.AbpSettingManagementEntityFrameworkCoreModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.EntityFrameworkCore.PostgreSql.AbpEntityFrameworkCorePostgreSqlModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.BackgroundJobs.EntityFrameworkCore.AbpBackgroundJobsEntityFrameworkCoreModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AuditLogging.EntityFrameworkCore.AbpAuditLoggingEntityFrameworkCoreModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.TenantManagement.EntityFrameworkCore.AbpTenantManagementEntityFrameworkCoreModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.FeatureManagement.EntityFrameworkCore.AbpFeatureManagementEntityFrameworkCoreModule +2025-11-01 23:10:36.757 +08:00 [INF] - KonSoft.Shared.Hosting.Microservices.KonSoftSharedHostingMicroservicesModule +2025-11-01 23:10:36.757 +08:00 [INF] - KonSoft.Shared.Hosting.AspNetCore.KonSoftSharedHostingAspNetCoreModule +2025-11-01 23:10:36.757 +08:00 [INF] - KonSoft.Shared.Localization.KonSoftSharedLocalizationModule +2025-11-01 23:10:36.757 +08:00 [INF] - KonSoft.Shared.Hosting.KonSoftSharedHostingModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.BackgroundJobs.RabbitMQ.AbpBackgroundJobsRabbitMqModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.RabbitMQ.AbpRabbitMqModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AspNetCore.Authentication.JwtBearer.AbpAspNetCoreAuthenticationJwtBearerModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.EventBus.RabbitMq.AbpEventBusRabbitMqModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.Caching.StackExchangeRedis.AbpCachingStackExchangeRedisModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy.AbpAspNetCoreMvcUiMultiTenancyModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.AbpAspNetCoreMvcUiThemeSharedModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.AbpAspNetCoreMvcUiBootstrapModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.AbpAspNetCoreMvcUiModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Packages.AbpAspNetCoreMvcUiPackagesModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bundling.AbpAspNetCoreMvcUiBundlingAbstractionsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Widgets.AbpAspNetCoreMvcUiWidgetsModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bundling.AbpAspNetCoreMvcUiBundlingModule +2025-11-01 23:10:36.757 +08:00 [INF] - Volo.Abp.AspNetCore.MultiTenancy.AbpAspNetCoreMultiTenancyModule +2025-11-01 23:10:37.306 +08:00 [INF] Initialized all ABP modules. +2025-11-01 23:10:37.523 +08:00 [INF] Now listening on: http://localhost:44354 +2025-11-01 23:10:37.568 +08:00 [INF] Application started. Press Ctrl+C to shut down. +2025-11-01 23:10:37.569 +08:00 [INF] Hosting environment: Development +2025-11-01 23:10:37.569 +08:00 [INF] Content root path: C:\Users\Administrator\source\repos\KonSoft.Clean\microservices\KonSoft.Admin.HttpApi.Host +2025-11-01 23:10:37.900 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/ - null null +2025-11-01 23:10:40.646 +08:00 [INF] Executing endpoint 'KonSoft.Admin.Controllers.HomeController.Index (KonSoft.Admin.HttpApi.Host)' +2025-11-01 23:10:40.667 +08:00 [INF] Route matched with {action = "Index", controller = "Home", area = "", page = ""}. Executing controller action with signature Microsoft.AspNetCore.Mvc.ActionResult Index() on controller KonSoft.Admin.Controllers.HomeController (KonSoft.Admin.HttpApi.Host). +2025-11-01 23:10:40.680 +08:00 [INF] Executing RedirectResult, redirecting to /swagger. +2025-11-01 23:10:40.682 +08:00 [INF] Executed action KonSoft.Admin.Controllers.HomeController.Index (KonSoft.Admin.HttpApi.Host) in 12.8975ms +2025-11-01 23:10:40.682 +08:00 [INF] Executed endpoint 'KonSoft.Admin.Controllers.HomeController.Index (KonSoft.Admin.HttpApi.Host)' +2025-11-01 23:10:40.687 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/ - 302 0 null 2786.7132ms +2025-11-01 23:10:40.687 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/swagger - null null +2025-11-01 23:10:40.691 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/swagger - 301 0 null 3.9366ms +2025-11-01 23:10:40.694 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/swagger/index.html - null null +2025-11-01 23:10:40.724 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/swagger/index.html - 200 null text/html;charset=utf-8 29.7605ms +2025-11-01 23:10:40.788 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/swagger/swagger-ui.css - null null +2025-11-01 23:10:40.789 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/swagger/ui/abp.js - null null +2025-11-01 23:10:40.791 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/swagger/swagger-ui-bundle.js - null null +2025-11-01 23:10:40.790 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/swagger/ui/abp.swagger.js - null null +2025-11-01 23:10:40.791 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/swagger/swagger-ui-standalone-preset.js - null null +2025-11-01 23:10:40.791 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/_framework/aspnetcore-browser-refresh.js - null null +2025-11-01 23:10:40.792 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/_framework/aspnetcore-browser-refresh.js - 200 16537 application/javascript; charset=utf-8 0.7413ms +2025-11-01 23:10:40.793 +08:00 [INF] Sending file. Request path: '/swagger/ui/abp.swagger.js'. Physical path: 'N/A' +2025-11-01 23:10:40.793 +08:00 [INF] Sending file. Request path: '/swagger/ui/abp.js'. Physical path: 'N/A' +2025-11-01 23:10:40.793 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/swagger/ui/abp.js - 200 3122 application/javascript 4.3881ms +2025-11-01 23:10:40.793 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/swagger/ui/abp.swagger.js - 200 4527 application/javascript 2.82ms +2025-11-01 23:10:40.798 +08:00 [INF] Sending file. Request path: '/swagger-ui.css'. Physical path: 'N/A' +2025-11-01 23:10:40.798 +08:00 [INF] Sending file. Request path: '/swagger-ui-standalone-preset.js'. Physical path: 'N/A' +2025-11-01 23:10:40.801 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/swagger/swagger-ui.css - 200 144929 text/css 12.7608ms +2025-11-01 23:10:40.801 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/swagger/swagger-ui-standalone-preset.js - 200 312163 text/javascript 10.3524ms +2025-11-01 23:10:40.809 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/_vs/browserLink - null null +2025-11-01 23:10:40.810 +08:00 [INF] Sending file. Request path: '/swagger-ui-bundle.js'. Physical path: 'N/A' +2025-11-01 23:10:40.810 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/swagger/swagger-ui-bundle.js - 200 1061536 text/javascript 19.8798ms +2025-11-01 23:10:40.823 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/_vs/browserLink - 200 null text/javascript; charset=UTF-8 14.4223ms +2025-11-01 23:10:41.293 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/swagger/v1/swagger.json - null null +2025-11-01 23:10:41.338 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/swagger/favicon-32x32.png - null null +2025-11-01 23:10:41.340 +08:00 [INF] Sending file. Request path: '/favicon-32x32.png'. Physical path: 'N/A' +2025-11-01 23:10:41.340 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/swagger/favicon-32x32.png - 200 628 image/png 1.4472ms +2025-11-01 23:10:41.411 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/swagger/v1/swagger.json - 200 null application/json;charset=utf-8 118.4302ms +2025-11-01 23:10:41.425 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/api/abp/application-configuration - null null +2025-11-01 23:10:41.426 +08:00 [INF] Executing endpoint 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController.GetAsync (Volo.Abp.AspNetCore.Mvc)' +2025-11-01 23:10:41.433 +08:00 [INF] Route matched with {area = "abp", action = "Get", controller = "AbpApplicationConfiguration", page = ""}. Executing controller action with signature System.Threading.Tasks.Task`1[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto] GetAsync(Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationRequestOptions) on controller Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController (Volo.Abp.AspNetCore.Mvc). +2025-11-01 23:10:41.472 +08:00 [WRN] The cookie 'XSRF-TOKEN' has set 'SameSite=None' and must also set 'Secure'. +2025-11-01 23:10:43.202 +08:00 [INF] Executing ObjectResult, writing value of type 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto'. +2025-11-01 23:10:43.217 +08:00 [INF] Executed action Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController.GetAsync (Volo.Abp.AspNetCore.Mvc) in 1784.1141ms +2025-11-01 23:10:43.217 +08:00 [INF] Executed endpoint 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController.GetAsync (Volo.Abp.AspNetCore.Mvc)' +2025-11-01 23:10:43.400 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/api/abp/application-configuration - 200 null application/json; charset=utf-8 1975.4364ms +2025-11-01 23:10:44.350 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/abp/Swashbuckle/SetCsrfCookie - null null +2025-11-01 23:10:44.355 +08:00 [INF] Executing endpoint 'Volo.Abp.Swashbuckle.AbpSwashbuckleController.SetCsrfCookie (Volo.Abp.Swashbuckle)' +2025-11-01 23:10:44.357 +08:00 [INF] Route matched with {area = "Abp", action = "SetCsrfCookie", controller = "AbpSwashbuckle", page = ""}. Executing controller action with signature Void SetCsrfCookie() on controller Volo.Abp.Swashbuckle.AbpSwashbuckleController (Volo.Abp.Swashbuckle). +2025-11-01 23:10:44.363 +08:00 [WRN] The cookie 'XSRF-TOKEN' has set 'SameSite=None' and must also set 'Secure'. +2025-11-01 23:10:44.363 +08:00 [INF] Executed action Volo.Abp.Swashbuckle.AbpSwashbuckleController.SetCsrfCookie (Volo.Abp.Swashbuckle) in 5.6257ms +2025-11-01 23:10:44.363 +08:00 [INF] Executed endpoint 'Volo.Abp.Swashbuckle.AbpSwashbuckleController.SetCsrfCookie (Volo.Abp.Swashbuckle)' +2025-11-01 23:10:44.363 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/abp/Swashbuckle/SetCsrfCookie - 204 null null 13.5266ms +2025-11-01 23:28:55.612 +08:00 [INF] Starting KonSoft.Admin.HttpApi.Host. +2025-11-01 23:28:57.886 +08:00 [INF] Loaded ABP modules: +2025-11-01 23:28:57.887 +08:00 [INF] - KonSoft.Admin.AdminHttpApiHostModule +2025-11-01 23:28:57.887 +08:00 [INF] - KonSoft.Admin.AdminHttpApiModule +2025-11-01 23:28:57.887 +08:00 [INF] - KonSoft.Admin.AdminApplicationContractsModule +2025-11-01 23:28:57.887 +08:00 [INF] - KonSoft.Admin.AdminDomainSharedModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AuditLogging.AbpAuditLoggingDomainSharedModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.BackgroundJobs.AbpBackgroundJobsDomainSharedModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementDomainSharedModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityDomainSharedModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Users.AbpUsersDomainSharedModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.OpenIddict.AbpOpenIddictDomainSharedModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementDomainSharedModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementDomainSharedModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementDomainSharedModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Account.AbpAccountApplicationContractsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityApplicationContractsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Users.AbpUsersAbstractionModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementApplicationContractsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementApplicationContractsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementApplicationContractsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementApplicationContractsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Account.AbpAccountHttpApiModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityHttpApiModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreAbstractionsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.PermissionManagement.HttpApi.AbpPermissionManagementHttpApiModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementHttpApiModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementHttpApiModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementHttpApiModule +2025-11-01 23:28:57.887 +08:00 [INF] - KonSoft.Admin.AdminApplicationModule +2025-11-01 23:28:57.887 +08:00 [INF] - KonSoft.Admin.AdminDomainModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AuditLogging.AbpAuditLoggingDomainModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.BackgroundJobs.AbpBackgroundJobsDomainModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.BackgroundJobs.AbpBackgroundJobsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.BackgroundJobs.AbpBackgroundJobsAbstractionsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AutoMapper.AbpAutoMapperModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementDomainModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityDomainModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Users.AbpUsersDomainModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.OpenIddict.AbpOpenIddictDomainModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.PermissionManagement.OpenIddict.AbpPermissionManagementDomainOpenIddictModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementDomainModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.PermissionManagement.Identity.AbpPermissionManagementDomainIdentityModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementDomainModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementDomainModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Emailing.AbpEmailingModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.TextTemplating.AbpTextTemplatingModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.TextTemplating.Scriban.AbpTextTemplatingScribanModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.TextTemplating.AbpTextTemplatingCoreModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Account.AbpAccountApplicationModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityApplicationModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementApplicationModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementApplicationModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementApplicationModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementApplicationModule +2025-11-01 23:28:57.887 +08:00 [INF] - KonSoft.Admin.EntityFrameworkCore.AdminEntityFrameworkCoreModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Identity.EntityFrameworkCore.AbpIdentityEntityFrameworkCoreModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Users.EntityFrameworkCore.AbpUsersEntityFrameworkCoreModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.EntityFrameworkCore.AbpEntityFrameworkCoreModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.OpenIddict.EntityFrameworkCore.AbpOpenIddictEntityFrameworkCoreModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.PermissionManagement.EntityFrameworkCore.AbpPermissionManagementEntityFrameworkCoreModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.SettingManagement.EntityFrameworkCore.AbpSettingManagementEntityFrameworkCoreModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.EntityFrameworkCore.PostgreSql.AbpEntityFrameworkCorePostgreSqlModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.BackgroundJobs.EntityFrameworkCore.AbpBackgroundJobsEntityFrameworkCoreModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AuditLogging.EntityFrameworkCore.AbpAuditLoggingEntityFrameworkCoreModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.TenantManagement.EntityFrameworkCore.AbpTenantManagementEntityFrameworkCoreModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.FeatureManagement.EntityFrameworkCore.AbpFeatureManagementEntityFrameworkCoreModule +2025-11-01 23:28:57.887 +08:00 [INF] - KonSoft.Shared.Hosting.Microservices.KonSoftSharedHostingMicroservicesModule +2025-11-01 23:28:57.887 +08:00 [INF] - KonSoft.Shared.Hosting.AspNetCore.KonSoftSharedHostingAspNetCoreModule +2025-11-01 23:28:57.887 +08:00 [INF] - KonSoft.Shared.Localization.KonSoftSharedLocalizationModule +2025-11-01 23:28:57.887 +08:00 [INF] - KonSoft.Shared.Hosting.KonSoftSharedHostingModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.BackgroundJobs.RabbitMQ.AbpBackgroundJobsRabbitMqModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.RabbitMQ.AbpRabbitMqModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AspNetCore.Authentication.JwtBearer.AbpAspNetCoreAuthenticationJwtBearerModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.EventBus.RabbitMq.AbpEventBusRabbitMqModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.Caching.StackExchangeRedis.AbpCachingStackExchangeRedisModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy.AbpAspNetCoreMvcUiMultiTenancyModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.AbpAspNetCoreMvcUiThemeSharedModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.AbpAspNetCoreMvcUiBootstrapModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.AbpAspNetCoreMvcUiModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Packages.AbpAspNetCoreMvcUiPackagesModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bundling.AbpAspNetCoreMvcUiBundlingAbstractionsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Widgets.AbpAspNetCoreMvcUiWidgetsModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bundling.AbpAspNetCoreMvcUiBundlingModule +2025-11-01 23:28:57.887 +08:00 [INF] - Volo.Abp.AspNetCore.MultiTenancy.AbpAspNetCoreMultiTenancyModule +2025-11-01 23:28:58.462 +08:00 [INF] Initialized all ABP modules. +2025-11-01 23:28:58.692 +08:00 [INF] Now listening on: https://localhost:44354 +2025-11-01 23:28:58.742 +08:00 [INF] Application started. Press Ctrl+C to shut down. +2025-11-01 23:28:58.742 +08:00 [INF] Hosting environment: Development +2025-11-01 23:28:58.742 +08:00 [INF] Content root path: C:\Users\Administrator\source\repos\KonSoft.Clean\microservices\KonSoft.Admin.HttpApi.Host +2025-11-01 23:29:02.842 +08:00 [INF] Starting KonSoft.Admin.HttpApi.Host. +2025-11-01 23:29:04.950 +08:00 [INF] Loaded ABP modules: +2025-11-01 23:29:04.951 +08:00 [INF] - KonSoft.Admin.AdminHttpApiHostModule +2025-11-01 23:29:04.951 +08:00 [INF] - KonSoft.Admin.AdminHttpApiModule +2025-11-01 23:29:04.951 +08:00 [INF] - KonSoft.Admin.AdminApplicationContractsModule +2025-11-01 23:29:04.951 +08:00 [INF] - KonSoft.Admin.AdminDomainSharedModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AuditLogging.AbpAuditLoggingDomainSharedModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.BackgroundJobs.AbpBackgroundJobsDomainSharedModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementDomainSharedModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityDomainSharedModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Users.AbpUsersDomainSharedModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.OpenIddict.AbpOpenIddictDomainSharedModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementDomainSharedModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementDomainSharedModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementDomainSharedModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Account.AbpAccountApplicationContractsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityApplicationContractsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Users.AbpUsersAbstractionModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementApplicationContractsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementApplicationContractsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementApplicationContractsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementApplicationContractsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Account.AbpAccountHttpApiModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityHttpApiModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreAbstractionsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.PermissionManagement.HttpApi.AbpPermissionManagementHttpApiModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementHttpApiModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementHttpApiModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementHttpApiModule +2025-11-01 23:29:04.951 +08:00 [INF] - KonSoft.Admin.AdminApplicationModule +2025-11-01 23:29:04.951 +08:00 [INF] - KonSoft.Admin.AdminDomainModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AuditLogging.AbpAuditLoggingDomainModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.BackgroundJobs.AbpBackgroundJobsDomainModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.BackgroundJobs.AbpBackgroundJobsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.BackgroundJobs.AbpBackgroundJobsAbstractionsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AutoMapper.AbpAutoMapperModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementDomainModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityDomainModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Users.AbpUsersDomainModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.OpenIddict.AbpOpenIddictDomainModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.PermissionManagement.OpenIddict.AbpPermissionManagementDomainOpenIddictModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementDomainModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.PermissionManagement.Identity.AbpPermissionManagementDomainIdentityModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementDomainModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementDomainModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Emailing.AbpEmailingModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.TextTemplating.AbpTextTemplatingModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.TextTemplating.Scriban.AbpTextTemplatingScribanModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.TextTemplating.AbpTextTemplatingCoreModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Account.AbpAccountApplicationModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityApplicationModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementApplicationModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementApplicationModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementApplicationModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementApplicationModule +2025-11-01 23:29:04.951 +08:00 [INF] - KonSoft.Admin.EntityFrameworkCore.AdminEntityFrameworkCoreModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Identity.EntityFrameworkCore.AbpIdentityEntityFrameworkCoreModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Users.EntityFrameworkCore.AbpUsersEntityFrameworkCoreModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.EntityFrameworkCore.AbpEntityFrameworkCoreModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.OpenIddict.EntityFrameworkCore.AbpOpenIddictEntityFrameworkCoreModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.PermissionManagement.EntityFrameworkCore.AbpPermissionManagementEntityFrameworkCoreModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.SettingManagement.EntityFrameworkCore.AbpSettingManagementEntityFrameworkCoreModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.EntityFrameworkCore.PostgreSql.AbpEntityFrameworkCorePostgreSqlModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.BackgroundJobs.EntityFrameworkCore.AbpBackgroundJobsEntityFrameworkCoreModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AuditLogging.EntityFrameworkCore.AbpAuditLoggingEntityFrameworkCoreModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.TenantManagement.EntityFrameworkCore.AbpTenantManagementEntityFrameworkCoreModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.FeatureManagement.EntityFrameworkCore.AbpFeatureManagementEntityFrameworkCoreModule +2025-11-01 23:29:04.951 +08:00 [INF] - KonSoft.Shared.Hosting.Microservices.KonSoftSharedHostingMicroservicesModule +2025-11-01 23:29:04.951 +08:00 [INF] - KonSoft.Shared.Hosting.AspNetCore.KonSoftSharedHostingAspNetCoreModule +2025-11-01 23:29:04.951 +08:00 [INF] - KonSoft.Shared.Localization.KonSoftSharedLocalizationModule +2025-11-01 23:29:04.951 +08:00 [INF] - KonSoft.Shared.Hosting.KonSoftSharedHostingModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.BackgroundJobs.RabbitMQ.AbpBackgroundJobsRabbitMqModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.RabbitMQ.AbpRabbitMqModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AspNetCore.Authentication.JwtBearer.AbpAspNetCoreAuthenticationJwtBearerModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.EventBus.RabbitMq.AbpEventBusRabbitMqModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.Caching.StackExchangeRedis.AbpCachingStackExchangeRedisModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy.AbpAspNetCoreMvcUiMultiTenancyModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.AbpAspNetCoreMvcUiThemeSharedModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.AbpAspNetCoreMvcUiBootstrapModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.AbpAspNetCoreMvcUiModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Packages.AbpAspNetCoreMvcUiPackagesModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bundling.AbpAspNetCoreMvcUiBundlingAbstractionsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Widgets.AbpAspNetCoreMvcUiWidgetsModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bundling.AbpAspNetCoreMvcUiBundlingModule +2025-11-01 23:29:04.951 +08:00 [INF] - Volo.Abp.AspNetCore.MultiTenancy.AbpAspNetCoreMultiTenancyModule +2025-11-01 23:29:05.472 +08:00 [INF] Initialized all ABP modules. +2025-11-01 23:29:05.678 +08:00 [INF] Now listening on: http://localhost:44354 +2025-11-01 23:29:05.731 +08:00 [INF] Application started. Press Ctrl+C to shut down. +2025-11-01 23:29:05.731 +08:00 [INF] Hosting environment: Development +2025-11-01 23:29:05.731 +08:00 [INF] Content root path: C:\Users\Administrator\source\repos\KonSoft.Clean\microservices\KonSoft.Admin.HttpApi.Host +2025-11-01 23:29:32.663 +08:00 [INF] Starting KonSoft.Admin.HttpApi.Host. +2025-11-01 23:29:34.810 +08:00 [INF] Loaded ABP modules: +2025-11-01 23:29:34.810 +08:00 [INF] - KonSoft.Admin.AdminHttpApiHostModule +2025-11-01 23:29:34.810 +08:00 [INF] - KonSoft.Admin.AdminHttpApiModule +2025-11-01 23:29:34.810 +08:00 [INF] - KonSoft.Admin.AdminApplicationContractsModule +2025-11-01 23:29:34.810 +08:00 [INF] - KonSoft.Admin.AdminDomainSharedModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.AuditLogging.AbpAuditLoggingDomainSharedModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.BackgroundJobs.AbpBackgroundJobsDomainSharedModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementDomainSharedModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityDomainSharedModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Users.AbpUsersDomainSharedModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.OpenIddict.AbpOpenIddictDomainSharedModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementDomainSharedModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementDomainSharedModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementDomainSharedModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Account.AbpAccountApplicationContractsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityApplicationContractsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Users.AbpUsersAbstractionModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementApplicationContractsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementApplicationContractsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementApplicationContractsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementApplicationContractsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Account.AbpAccountHttpApiModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityHttpApiModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreAbstractionsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2025-11-01 23:29:34.810 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.PermissionManagement.HttpApi.AbpPermissionManagementHttpApiModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementHttpApiModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementHttpApiModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementHttpApiModule +2025-11-01 23:29:34.811 +08:00 [INF] - KonSoft.Admin.AdminApplicationModule +2025-11-01 23:29:34.811 +08:00 [INF] - KonSoft.Admin.AdminDomainModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.AuditLogging.AbpAuditLoggingDomainModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.BackgroundJobs.AbpBackgroundJobsDomainModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.BackgroundJobs.AbpBackgroundJobsModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.BackgroundJobs.AbpBackgroundJobsAbstractionsModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.AutoMapper.AbpAutoMapperModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementDomainModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityDomainModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.Users.AbpUsersDomainModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.OpenIddict.AbpOpenIddictDomainModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.PermissionManagement.OpenIddict.AbpPermissionManagementDomainOpenIddictModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementDomainModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.PermissionManagement.Identity.AbpPermissionManagementDomainIdentityModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementDomainModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementDomainModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.Emailing.AbpEmailingModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.TextTemplating.AbpTextTemplatingModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.TextTemplating.Scriban.AbpTextTemplatingScribanModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.TextTemplating.AbpTextTemplatingCoreModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.Account.AbpAccountApplicationModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.Identity.AbpIdentityApplicationModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementApplicationModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.TenantManagement.AbpTenantManagementApplicationModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.FeatureManagement.AbpFeatureManagementApplicationModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementApplicationModule +2025-11-01 23:29:34.811 +08:00 [INF] - KonSoft.Admin.EntityFrameworkCore.AdminEntityFrameworkCoreModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.Identity.EntityFrameworkCore.AbpIdentityEntityFrameworkCoreModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.Users.EntityFrameworkCore.AbpUsersEntityFrameworkCoreModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.EntityFrameworkCore.AbpEntityFrameworkCoreModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.OpenIddict.EntityFrameworkCore.AbpOpenIddictEntityFrameworkCoreModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.PermissionManagement.EntityFrameworkCore.AbpPermissionManagementEntityFrameworkCoreModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.SettingManagement.EntityFrameworkCore.AbpSettingManagementEntityFrameworkCoreModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.EntityFrameworkCore.PostgreSql.AbpEntityFrameworkCorePostgreSqlModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.BackgroundJobs.EntityFrameworkCore.AbpBackgroundJobsEntityFrameworkCoreModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.AuditLogging.EntityFrameworkCore.AbpAuditLoggingEntityFrameworkCoreModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.TenantManagement.EntityFrameworkCore.AbpTenantManagementEntityFrameworkCoreModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.FeatureManagement.EntityFrameworkCore.AbpFeatureManagementEntityFrameworkCoreModule +2025-11-01 23:29:34.811 +08:00 [INF] - KonSoft.Shared.Hosting.Microservices.KonSoftSharedHostingMicroservicesModule +2025-11-01 23:29:34.811 +08:00 [INF] - KonSoft.Shared.Hosting.AspNetCore.KonSoftSharedHostingAspNetCoreModule +2025-11-01 23:29:34.811 +08:00 [INF] - KonSoft.Shared.Localization.KonSoftSharedLocalizationModule +2025-11-01 23:29:34.811 +08:00 [INF] - KonSoft.Shared.Hosting.KonSoftSharedHostingModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.BackgroundJobs.RabbitMQ.AbpBackgroundJobsRabbitMqModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.RabbitMQ.AbpRabbitMqModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.AspNetCore.Authentication.JwtBearer.AbpAspNetCoreAuthenticationJwtBearerModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.EventBus.RabbitMq.AbpEventBusRabbitMqModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.Caching.StackExchangeRedis.AbpCachingStackExchangeRedisModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy.AbpAspNetCoreMvcUiMultiTenancyModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.AbpAspNetCoreMvcUiThemeSharedModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.AbpAspNetCoreMvcUiBootstrapModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.AbpAspNetCoreMvcUiModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Packages.AbpAspNetCoreMvcUiPackagesModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bundling.AbpAspNetCoreMvcUiBundlingAbstractionsModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Widgets.AbpAspNetCoreMvcUiWidgetsModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bundling.AbpAspNetCoreMvcUiBundlingModule +2025-11-01 23:29:34.811 +08:00 [INF] - Volo.Abp.AspNetCore.MultiTenancy.AbpAspNetCoreMultiTenancyModule +2025-11-01 23:29:35.475 +08:00 [INF] Initialized all ABP modules. +2025-11-01 23:29:35.691 +08:00 [INF] Now listening on: http://localhost:44354 +2025-11-01 23:29:35.759 +08:00 [INF] Application started. Press Ctrl+C to shut down. +2025-11-01 23:29:35.759 +08:00 [INF] Hosting environment: Development +2025-11-01 23:29:35.759 +08:00 [INF] Content root path: C:\Users\Administrator\source\repos\KonSoft.Clean\microservices\KonSoft.Admin.HttpApi.Host +2025-11-01 23:29:36.783 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/swagger/index.html - null null +2025-11-01 23:29:37.656 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/swagger/index.html - 200 null text/html;charset=utf-8 872.8863ms +2025-11-01 23:29:37.677 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/_framework/aspnetcore-browser-refresh.js - null null +2025-11-01 23:29:37.678 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/_framework/aspnetcore-browser-refresh.js - 200 16537 application/javascript; charset=utf-8 1.1399ms +2025-11-01 23:29:37.681 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/_vs/browserLink - null null +2025-11-01 23:29:37.698 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/_vs/browserLink - 200 null text/javascript; charset=UTF-8 16.2384ms +2025-11-01 23:29:37.964 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/swagger/v1/swagger.json - null null +2025-11-01 23:29:38.115 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/swagger/v1/swagger.json - 200 null application/json;charset=utf-8 150.774ms +2025-11-01 23:29:38.126 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/api/abp/application-configuration - null null +2025-11-01 23:29:38.181 +08:00 [INF] Executing endpoint 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController.GetAsync (Volo.Abp.AspNetCore.Mvc)' +2025-11-01 23:29:38.198 +08:00 [INF] Route matched with {area = "abp", action = "Get", controller = "AbpApplicationConfiguration", page = ""}. Executing controller action with signature System.Threading.Tasks.Task`1[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto] GetAsync(Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationRequestOptions) on controller Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController (Volo.Abp.AspNetCore.Mvc). +2025-11-01 23:29:38.244 +08:00 [WRN] The cookie 'XSRF-TOKEN' has set 'SameSite=None' and must also set 'Secure'. +2025-11-01 23:29:40.232 +08:00 [INF] Executing ObjectResult, writing value of type 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto'. +2025-11-01 23:29:40.247 +08:00 [INF] Executed action Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController.GetAsync (Volo.Abp.AspNetCore.Mvc) in 2047.1243ms +2025-11-01 23:29:40.247 +08:00 [INF] Executed endpoint 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController.GetAsync (Volo.Abp.AspNetCore.Mvc)' +2025-11-01 23:29:40.248 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/api/abp/application-configuration - 200 null application/json; charset=utf-8 2121.9523ms +2025-11-01 23:29:41.322 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:44354/abp/Swashbuckle/SetCsrfCookie - null null +2025-11-01 23:29:41.324 +08:00 [INF] Executing endpoint 'Volo.Abp.Swashbuckle.AbpSwashbuckleController.SetCsrfCookie (Volo.Abp.Swashbuckle)' +2025-11-01 23:29:41.325 +08:00 [INF] Route matched with {area = "Abp", action = "SetCsrfCookie", controller = "AbpSwashbuckle", page = ""}. Executing controller action with signature Void SetCsrfCookie() on controller Volo.Abp.Swashbuckle.AbpSwashbuckleController (Volo.Abp.Swashbuckle). +2025-11-01 23:29:41.326 +08:00 [WRN] The cookie 'XSRF-TOKEN' has set 'SameSite=None' and must also set 'Secure'. +2025-11-01 23:29:41.327 +08:00 [INF] Executed action Volo.Abp.Swashbuckle.AbpSwashbuckleController.SetCsrfCookie (Volo.Abp.Swashbuckle) in 1.6838ms +2025-11-01 23:29:41.327 +08:00 [INF] Executed endpoint 'Volo.Abp.Swashbuckle.AbpSwashbuckleController.SetCsrfCookie (Volo.Abp.Swashbuckle)' +2025-11-01 23:29:41.327 +08:00 [INF] Request finished HTTP/1.1 GET http://localhost:44354/abp/Swashbuckle/SetCsrfCookie - 204 null null 4.6319ms diff --git a/shared/KonSoft.Shared.Hosting.Gateways/AbpHostingHostBuilderExtensions.cs b/shared/KonSoft.Shared.Hosting.Gateways/AbpHostingHostBuilderExtensions.cs new file mode 100644 index 0000000..a716374 --- /dev/null +++ b/shared/KonSoft.Shared.Hosting.Gateways/AbpHostingHostBuilderExtensions.cs @@ -0,0 +1,27 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; + +namespace KonSoft.Shared.Hosting.Gateways +{ + public static class AbpHostingHostBuilderExtensions + { + public const string AppYarpJsonPath = "yarp.json"; + + public static IHostBuilder AddYarpJson( + this IHostBuilder hostBuilder, + bool optional = true, + bool reloadOnChange = true, + string path = AppYarpJsonPath) + { + return hostBuilder.ConfigureAppConfiguration((_, builder) => + { + builder.AddJsonFile( + path: AppYarpJsonPath, + optional: optional, + reloadOnChange: reloadOnChange + ) + .AddEnvironmentVariables(); + }); + } + } +} diff --git a/shared/KonSoft.Shared.Hosting.Gateways/KonSoft.Shared.Hosting.Gateways.csproj b/shared/KonSoft.Shared.Hosting.Gateways/KonSoft.Shared.Hosting.Gateways.csproj index dc74281..a1b18d3 100644 --- a/shared/KonSoft.Shared.Hosting.Gateways/KonSoft.Shared.Hosting.Gateways.csproj +++ b/shared/KonSoft.Shared.Hosting.Gateways/KonSoft.Shared.Hosting.Gateways.csproj @@ -7,6 +7,8 @@ + + diff --git a/shared/KonSoft.Shared.Hosting.Gateways/KonSoftSharedHostingGatewaysModule.cs b/shared/KonSoft.Shared.Hosting.Gateways/KonSoftSharedHostingGatewaysModule.cs index a412920..d9ad282 100644 --- a/shared/KonSoft.Shared.Hosting.Gateways/KonSoftSharedHostingGatewaysModule.cs +++ b/shared/KonSoft.Shared.Hosting.Gateways/KonSoftSharedHostingGatewaysModule.cs @@ -1,4 +1,5 @@ using KonSoft.Shared.Hosting.AspNetCore; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Modularity; namespace KonSoft.Shared.Hosting.Gateways; @@ -8,4 +9,14 @@ namespace KonSoft.Shared.Hosting.Gateways; )] public class KonSoftSharedHostingGatewaysModule : AbpModule { + public override void ConfigureServices(ServiceConfigurationContext context) + { + var configuration = context.Services.GetConfiguration(); + + context.Services.AddHttpForwarderWithServiceDiscovery(); + + context.Services.AddReverseProxy() + .LoadFromConfig(configuration.GetSection("ReverseProxy")) + .AddServiceDiscoveryDestinationResolver(); + } } \ No newline at end of file diff --git a/shared/KonSoft.Shared.Hosting.Gateways/YarpSwaggerUIBuilderExtensions.cs b/shared/KonSoft.Shared.Hosting.Gateways/YarpSwaggerUIBuilderExtensions.cs new file mode 100644 index 0000000..ed034aa --- /dev/null +++ b/shared/KonSoft.Shared.Hosting.Gateways/YarpSwaggerUIBuilderExtensions.cs @@ -0,0 +1,61 @@ +using KonSoft.Shared.Hosting.AspNetCore; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using System; +using System.Linq; +using Volo.Abp; +using Yarp.ReverseProxy.Configuration; + +namespace KonSoft.Shared.Hosting.Gateways +{ + public static class YarpSwaggerUIBuilderExtensions + { + public static IApplicationBuilder UseSwaggerUIWithYarp(this IApplicationBuilder app, + ApplicationInitializationContext context) + { + app.UseSwagger(); + app.UseAbpSwaggerWithCustomScriptUI(options => + { + var configuration = context.ServiceProvider.GetRequiredService(); + var logger = context.ServiceProvider.GetRequiredService>(); + var proxyConfigProvider = context.ServiceProvider.GetRequiredService(); + var yarpConfig = proxyConfigProvider.GetConfig(); + + var routedClusters = yarpConfig.Clusters + .SelectMany(t => t.Destinations, + (clusterId, destination) => new { clusterId.ClusterId, destination.Value }); + + var groupedClusters = routedClusters + .GroupBy(q => q.Value.Address) + .Select(t => t.First()) + .Distinct() + .ToList(); + + foreach (var clusterGroup in groupedClusters) + { + var routeConfig = yarpConfig.Routes.FirstOrDefault(q => + q.ClusterId == clusterGroup.ClusterId); + if (routeConfig == null) + { + logger.LogWarning($"Swagger UI: Couldn't find route configuration for {clusterGroup.ClusterId}..."); + continue; + } + + var baseUrl = clusterGroup.Value.Address; + + if (Convert.ToBoolean(configuration["App:IsOnK8s"])) // If the application is running on K8s, the swagger.json should be reached from public dns. + { + baseUrl = clusterGroup.Value.Metadata?["PublicAddress"]; + } + + options.SwaggerEndpoint($"{baseUrl}/swagger/v1/swagger.json", $"{routeConfig.RouteId} API"); + options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]); + } + }); + + return app; + } + } +}