JiShe.IOT.Admin/host/JiShe.IoT.HttpApi.Host/IoTHttpApiHostModule.cs
2025-10-31 16:43:21 +08:00

139 lines
5.7 KiB
C#

using JiShe.ServicePro.Core;
using JiShe.ServicePro.PulsarProvider.Internal;
using JiShe.ServicePro.SwaggerConfigs;
using System.Reflection;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.Unicode;
using Volo.Abp.BlobStoring.FileSystem;
namespace JiShe.IoT
{
[DependsOn(
typeof(IoTHttpApiModule),
typeof(ServiceProSharedHostingMicroserviceModule),
typeof(AbpAspNetCoreMvcUiMultiTenancyModule),
typeof(IoTEntityFrameworkCoreModule),
typeof(AbpAspNetCoreAuthenticationJwtBearerModule),
typeof(AbpAspNetCoreSerilogModule),
typeof(AbpAccountWebModule),
typeof(IoTApplicationModule),
// typeof(AbpProCapModule),
// typeof(AbpProCapEntityFrameworkCoreModule),
typeof(AbpAspNetCoreMvcUiBasicThemeModule),
typeof(AbpCachingStackExchangeRedisModule),
typeof(AbpBlobStoringFileSystemModule),
typeof(AbpDistributedLockingModule)
//typeof(AbpBackgroundJobsHangfireModule)
)]
public partial class IoTHttpApiHostModule : AbpModule
{
public override void OnPostApplicationInitialization(ApplicationInitializationContext context)
{
// 应用程序初始化的时候注册hangfire
//context.CreateRecurringJob();
base.OnPostApplicationInitialization(context);
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
ConfigureCache(context);
ConfigurationDistributedLocking(context);
ConfigureSwaggerServices(context);
ConfigureJwtAuthentication(context, configuration);
//ConfigureHangfire(context);
ConfigureMiniProfiler(context);
ConfigureIdentity(context);
//ConfigureCap(context);
ConfigureAuditLog(context);
ConfigurationSignalR(context);
ConfigurationMultiTenancy();
ConfigureBlobStorage();
Configure<DataChannelOptions>(options =>
{
configuration.GetSection(nameof(DataChannelOptions)).Bind(options);
});
Configure<Volo.Abp.Json.SystemTextJson.AbpSystemTextJsonSerializerOptions>(options =>
{
options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.Never;
options.JsonSerializerOptions.WriteIndented = false;// 设置格式化输出
options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);// 允许特殊字符
options.JsonSerializerOptions.IgnoreReadOnlyFields = true;
options.JsonSerializerOptions.IgnoreReadOnlyProperties = true;
options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.AllowReadingFromString; // 允许数字字符串
options.JsonSerializerOptions.AllowTrailingCommas = true; // 忽略尾随逗号
options.JsonSerializerOptions.ReadCommentHandling = JsonCommentHandling.Skip; // 忽略注释
options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; // 属性名称大小写不敏感
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; // 属性名称使用驼峰命名规则
options.JsonSerializerOptions.DefaultBufferSize = 4096;
});
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var app = context.GetApplicationBuilder();
var configuration = context.GetConfiguration();
app.UseServiceProRequestLocalization();
app.UseCorrelationId();
app.MapAbpStaticAssets();
if (configuration.GetValue("MiniProfiler:Enabled", false))
{
app.UseMiniProfiler();
}
app.UseRouting();
app.UseCors(IoTHttpApiHostConst.DefaultCorsPolicyName);
app.UseAuthentication();
if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
app.UseAuthorization();
app.UseSwagger();
app.UseAbpSwaggerUI(options =>
{
var groupNames = EnumExtensions.GetEnumTypeValueNameList<SwaggerGroupEnum>();
var excludeSwaggerGroups = configuration.GetSection("ExcludeSwaggerGroup").Get<List<string>>() ?? new List<string>();
groupNames.ForEach(attr =>
{
if (!excludeSwaggerGroups.Where(e => e == attr.Key).Any())
{
options.SwaggerEndpoint($"/swagger/{attr.Key}/swagger.json", attr.Value);
}
});
options.SwaggerEndpoint("/swagger/AbpPro/swagger.json", "AbpPro API");
options.DocExpansion(DocExpansion.None);
options.DefaultModelsExpandDepth(-1);
});
app.UseAuditing();
app.UseAbpSerilogEnrichers();
app.UseUnitOfWork();
app.UseConfiguredEndpoints(endpoints =>
{
endpoints.MapHealthChecks("/health");
// endpoints.MapHangfireDashboard("/hangfire", new DashboardOptions()
// {
// Authorization = new[] { new CustomHangfireAuthorizeFilter() },
// IgnoreAntiforgeryToken = true
// });
});
if (configuration.GetValue("Consul:Enabled", false))
{
app.UseConsul();
}
}
}
}