diff --git a/templates/pro-nuget/service/host/MyCompanyName.MyProjectName.HttpApi.Host/GlobalUsings.cs b/templates/pro-nuget/service/host/MyCompanyName.MyProjectName.HttpApi.Host/GlobalUsings.cs index ed6b0b0b..5ae0b980 100644 --- a/templates/pro-nuget/service/host/MyCompanyName.MyProjectName.HttpApi.Host/GlobalUsings.cs +++ b/templates/pro-nuget/service/host/MyCompanyName.MyProjectName.HttpApi.Host/GlobalUsings.cs @@ -13,6 +13,7 @@ global using Hangfire.Dashboard; global using Hangfire.States; global using Hangfire.Storage; global using Lion.AbpPro; +global using Lion.AbpPro.AspNetCore; global using MyCompanyName.MyProjectName.EntityFrameworkCore; global using MyCompanyName.MyProjectName.MultiTenancy; global using Microsoft.AspNetCore.Authentication.JwtBearer; @@ -59,5 +60,6 @@ global using Volo.Abp.Http; global using Volo.Abp.Json; global using Volo.Abp.Modularity; global using Volo.Abp.MultiTenancy; +global using Volo.Abp.Swashbuckle; global using Volo.Abp.Users; global using Volo.Abp.Validation; \ No newline at end of file diff --git a/templates/pro-nuget/service/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj b/templates/pro-nuget/service/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj index 5b786630..30f64da9 100644 --- a/templates/pro-nuget/service/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj +++ b/templates/pro-nuget/service/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj @@ -27,6 +27,7 @@ + @@ -38,9 +39,6 @@ - - - diff --git a/templates/pro-nuget/service/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/pro-nuget/service/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 3debd6a6..57943598 100644 --- a/templates/pro-nuget/service/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/pro-nuget/service/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -1,5 +1,3 @@ -using Lion.AbpPro.AspNetCore; - namespace MyCompanyName.MyProjectName { [DependsOn( @@ -12,23 +10,13 @@ namespace MyCompanyName.MyProjectName typeof(AbpAccountWebModule), typeof(MyProjectNameApplicationModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), - typeof(AbpCachingStackExchangeRedisModule) + typeof(AbpCachingStackExchangeRedisModule), + typeof(AbpSwashbuckleModule) )] public class MyProjectNameHttpApiHostModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - var configuration = context.Services.GetConfiguration(); - ConfigureCache(context); - ConfigureSwaggerServices(context); - ConfigureJwtAuthentication(context, configuration); - ConfigureMiniProfiler(context); - ConfigureIdentity(context); - ConfigureAuditLog(context); - ConfigurationSignalR(context); - ConfigurationMultiTenancy(); - - context.Services .AddAbpProAuditLog() .AddAbpProAuthentication() @@ -50,35 +38,20 @@ namespace MyCompanyName.MyProjectName public override void OnApplicationInitialization(ApplicationInitializationContext context) { var app = context.GetApplicationBuilder(); - var configuration = context.GetConfiguration(); - app.UseAbpProRequestLocalization(); app.UseCorrelationId(); - app.UseStaticFiles(); - app.UseMiniProfiler(); + app.MapAbpStaticAssets(); + app.UseAbpProMiniProfiler(); app.UseRouting(); - app.UseCors(MyProjectNameHttpApiHostConst.DefaultCorsPolicyName); + app.UseAbpProCors(); app.UseAuthentication(); - - if (MultiTenancyConsts.IsEnabled) - { - app.UseMultiTenancy(); - } - + app.UseAbpProMultiTenancy(); app.UseAuthorization(); - app.UseSwagger(); - app.UseAbpSwaggerUI(options => - { - options.SwaggerEndpoint("/swagger/MyProjectName/swagger.json", "MyProjectName API"); - options.DocExpansion(DocExpansion.None); - options.DefaultModelsExpandDepth(-1); - }); - - app.UseAuditing(); + app.UseAbpProSwaggerUI("/swagger/AbpPro/swagger.json","AbpPro"); + app.UseAbpProAuditing(); app.UseAbpSerilogEnrichers(); - app.UseUnitOfWork(); - app.UseConfiguredEndpoints(endpoints => + app.UseConfiguredEndpoints(endpoints => { endpoints.MapHealthChecks("/health"); @@ -89,218 +62,7 @@ namespace MyCompanyName.MyProjectName // }); }); - - - } - - private void ConfigurationSignalR(ServiceConfigurationContext context) - { - var redisConnection = context.Services.GetConfiguration().GetValue("Redis:Configuration"); - - if (redisConnection.IsNullOrWhiteSpace()) - { - throw new UserFriendlyException(message: "Redis连接字符串未配置."); - } - - context.Services.AddSignalR().AddStackExchangeRedis(redisConnection, options => { options.Configuration.ChannelPrefix = "Lion.AbpPro"; }); - } - - /// - /// 配置MiniProfiler - /// - private void ConfigureMiniProfiler(ServiceConfigurationContext context) - { - context.Services.AddMiniProfiler(options => options.RouteBasePath = "/profiler").AddEntityFramework(); - } - - /// - /// 配置JWT - /// - private void ConfigureJwtAuthentication(ServiceConfigurationContext context, - IConfiguration configuration) - { - context.Services.AddAuthentication(options => - { - options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; - options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; - }) - .AddJwtBearer(options => - { - options.TokenValidationParameters = - new TokenValidationParameters() - { - // 是否开启签名认证 - ValidateIssuerSigningKey = true, - ValidateIssuer = true, - ValidateAudience = true, - ValidateLifetime = true, - //ClockSkew = TimeSpan.Zero, - ValidIssuer = configuration["Jwt:Issuer"], - ValidAudience = configuration["Jwt:Audience"], - IssuerSigningKey = - new SymmetricSecurityKey( - Encoding.ASCII.GetBytes(configuration["Jwt:SecurityKey"])) - }; - - options.Events = new JwtBearerEvents - { - OnMessageReceived = currentContext => - { - var path = currentContext.HttpContext.Request.Path; - if (path.StartsWithSegments("/login")) - { - return Task.CompletedTask; - } - - var accessToken = string.Empty; - if (currentContext.HttpContext.Request.Headers.ContainsKey("Authorization")) - { - accessToken = currentContext.HttpContext.Request.Headers["Authorization"]; - if (!string.IsNullOrWhiteSpace(accessToken)) - { - accessToken = accessToken.Split(" ").LastOrDefault(); - } - } - - if (accessToken.IsNullOrWhiteSpace()) - { - accessToken = currentContext.Request.Query["access_token"].FirstOrDefault(); - } - - if (accessToken.IsNullOrWhiteSpace()) - { - accessToken = currentContext.Request.Cookies[MyProjectNameHttpApiHostConst.DefaultCookieName]; - } - - currentContext.Token = accessToken; - currentContext.Request.Headers.Remove("Authorization"); - currentContext.Request.Headers.Add("Authorization", $"Bearer {accessToken}"); - - return Task.CompletedTask; - } - }; - }); - } - - - /// - /// Redis缓存 - /// - private void ConfigureCache(ServiceConfigurationContext context) - { - Configure( - options => { options.KeyPrefix = "MyProjectName:"; }); - var configuration = context.Services.GetConfiguration(); - var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); - context.Services - .AddDataProtection() - .PersistKeysToStackExchangeRedis(redis, "MyProjectName-Protection-Keys"); - } - - - /// - /// 配置Identity - /// - private void ConfigureIdentity(ServiceConfigurationContext context) - { - context.Services.Configure(options => { options.Lockout = new LockoutOptions() { AllowedForNewUsers = false }; }); - } - - private static void ConfigureSwaggerServices(ServiceConfigurationContext context) - { - context.Services.AddSwaggerGen( - options => - { - // 文件下载类型 - options.MapType(() => new OpenApiSchema() { Type = "file" }); - - options.SwaggerDoc("MyProjectName", - new OpenApiInfo { Title = "MyCompanyNameMyProjectName API", Version = "v1" }); - options.DocInclusionPredicate((docName, description) => true); - options.EnableAnnotations(); // 启用注解 - options.DocumentFilter(); - options.SchemaFilter(); - // 加载所有xml注释,这里会导致swagger加载有点缓慢 - var xmlPaths = Directory.GetFiles(AppContext.BaseDirectory, "*.xml"); - foreach (var xml in xmlPaths) - { - options.IncludeXmlComments(xml, true); - } - - options.AddSecurityDefinition(JwtBearerDefaults.AuthenticationScheme, - new OpenApiSecurityScheme() - { - Description = "直接在下框输入JWT生成的Token", - Name = "Authorization", - In = ParameterLocation.Header, - Type = SecuritySchemeType.Http, - Scheme = JwtBearerDefaults.AuthenticationScheme, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement - { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference - { - Type = ReferenceType.SecurityScheme, Id = "Bearer" - } - }, - new List() - } - }); - - options.AddSecurityDefinition("ApiKey", new OpenApiSecurityScheme() - { - Type = SecuritySchemeType.ApiKey, - In = ParameterLocation.Header, - Name = "Accept-Language", - Description = "多语言设置,系统预设语言有zh-Hans、en,默认为zh-Hans", - }); - - options.AddSecurityRequirement(new OpenApiSecurityRequirement - { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference - { Type = ReferenceType.SecurityScheme, Id = "ApiKey" } - }, - Array.Empty() - } - }); - }); - } - - - /// - /// 审计日志 - /// - private void ConfigureAuditLog(ServiceConfigurationContext context) - { - Configure - ( - options => - { - options.IsEnabled = true; - options.EntityHistorySelectors.AddAllEntities(); - options.ApplicationName = "MyCompanyName.MyProjectName"; - } - ); - - Configure( - options => - { - options.IgnoredUrls.Add("/AuditLogs/page"); - options.IgnoredUrls.Add("/hangfire/stats"); - options.IgnoredUrls.Add("/cap"); - }); - } - - private void ConfigurationMultiTenancy() - { - Configure(options => { options.IsEnabled = MultiTenancyConsts.IsEnabled; }); + app.UseAbpProConsul(); } } } \ No newline at end of file diff --git a/templates/pro-nuget/service/host/MyCompanyName.MyProjectName.WebGateway/MyCompanyName.MyProjectName.WebGateway.csproj b/templates/pro-nuget/service/host/MyCompanyName.MyProjectName.WebGateway/MyCompanyName.MyProjectName.WebGateway.csproj index 1a4dde84..25e55aeb 100644 --- a/templates/pro-nuget/service/host/MyCompanyName.MyProjectName.WebGateway/MyCompanyName.MyProjectName.WebGateway.csproj +++ b/templates/pro-nuget/service/host/MyCompanyName.MyProjectName.WebGateway/MyCompanyName.MyProjectName.WebGateway.csproj @@ -5,6 +5,6 @@ - + \ No newline at end of file diff --git a/templates/pro-nuget/service/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json b/templates/pro-nuget/service/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json index 12bc0f07..3cb9f713 100644 --- a/templates/pro-nuget/service/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json +++ b/templates/pro-nuget/service/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json @@ -1,5 +1,8 @@ { "ConnectionStrings": { "Default": "Data Source=localhost;Port=3306;Database=MyCompanyNameMyProjectNameDB;uid=root;pwd=1q2w3E*;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true" + }, + "Redis": { + "Configuration": "localhost:6379,password=75He82bB5jFA84XZ1,defaultdatabase=1" } } \ No newline at end of file