WebAppGatewayHostModule.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. using Microsoft.AspNetCore.Authentication.JwtBearer;
  2. using Microsoft.AspNetCore.Builder;
  3. using Microsoft.AspNetCore.Cors;
  4. using Microsoft.AspNetCore.DataProtection;
  5. using Microsoft.AspNetCore.Hosting;
  6. using Microsoft.Extensions.Configuration;
  7. using Microsoft.Extensions.DependencyInjection;
  8. using Microsoft.Extensions.Hosting;
  9. using Microsoft.OpenApi.Models;
  10. using Ocelot.DependencyInjection;
  11. using Ocelot.Middleware;
  12. using StackExchange.Redis;
  13. using System;
  14. using System.Linq;
  15. using Volo.Abp;
  16. using Volo.Abp.AspNetCore.Serilog;
  17. using Volo.Abp.Autofac;
  18. using Volo.Abp.EntityFrameworkCore;
  19. using Volo.Abp.Localization;
  20. using Volo.Abp.Modularity;
  21. namespace WebAppGateway
  22. {
  23. [DependsOn(
  24. typeof(AbpAutofacModule),
  25. typeof(AbpAspNetCoreSerilogModule)
  26. )]
  27. public class WebAppGatewayHostModule: AbpModule
  28. {
  29. private const string DefaultCorsPolicyName = "Default";
  30. public override void ConfigureServices(ServiceConfigurationContext context)
  31. {
  32. var configuration = context.Services.GetConfiguration();
  33. var hostingEnvironment = context.Services.GetHostingEnvironment();
  34. ConfigureAuthentication(context, configuration);
  35. //ConfigureSql();
  36. //ConfigureRedis(context, configuration, hostingEnvironment);
  37. ConfigureCors(context, configuration);
  38. //ConfigureSwaggerServices(context);
  39. ConfigureLocalization();
  40. context.Services.AddOcelot(context.Services.GetConfiguration());
  41. }
  42. public override void OnApplicationInitialization(ApplicationInitializationContext context)
  43. {
  44. var app = context.GetApplicationBuilder();
  45. app.UseCorrelationId();
  46. app.UseVirtualFiles();
  47. app.UseRouting();
  48. app.UseCors(DefaultCorsPolicyName);
  49. app.UseAuthentication();
  50. app.UseAbpClaimsMap();
  51. app.UseAuthorization();
  52. //app.UseSwagger();
  53. //app.UseSwaggerUI(options =>
  54. //{
  55. // options.SwaggerEndpoint("/swagger/v1/swagger.json", "Business Service API");
  56. //});
  57. app.UseOcelot().Wait();
  58. app.UseAbpSerilogEnrichers();
  59. }
  60. private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration)
  61. {
  62. context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
  63. .AddJwtBearer(options =>
  64. {
  65. options.Authority = configuration["AuthServer:Authority"];
  66. options.RequireHttpsMetadata = false;
  67. options.Audience = "WebAppGateway";
  68. });
  69. }
  70. private static void ConfigureSwaggerServices(ServiceConfigurationContext context)
  71. {
  72. context.Services.AddSwaggerGen(
  73. options =>
  74. {
  75. options.SwaggerDoc("v1", new OpenApiInfo { Title = "WebAppGateway Service API", Version = "v1" });
  76. options.DocInclusionPredicate((docName, description) => true);
  77. });
  78. }
  79. private void ConfigureLocalization()
  80. {
  81. Configure<AbpLocalizationOptions>(options =>
  82. {
  83. options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština"));
  84. options.Languages.Add(new LanguageInfo("en", "en", "English"));
  85. options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português"));
  86. options.Languages.Add(new LanguageInfo("ru", "ru", "Русский"));
  87. options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe"));
  88. options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));
  89. options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文"));
  90. });
  91. }
  92. private void ConfigureSql()
  93. {
  94. Configure<AbpDbContextOptions>(options =>
  95. {
  96. options.UseSqlServer();
  97. });
  98. }
  99. private void ConfigureRedis(
  100. ServiceConfigurationContext context,
  101. IConfiguration configuration,
  102. IWebHostEnvironment hostingEnvironment)
  103. {
  104. context.Services.AddStackExchangeRedisCache(options =>
  105. {
  106. options.Configuration = configuration["Redis:Configuration"];
  107. });
  108. if (!hostingEnvironment.IsDevelopment())
  109. {
  110. var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]);
  111. context.Services
  112. .AddDataProtection()
  113. .PersistKeysToStackExchangeRedis(redis, "DataProtection-Keys");
  114. }
  115. }
  116. private void ConfigureCors(ServiceConfigurationContext context, IConfiguration configuration)
  117. {
  118. context.Services.AddCors(options =>
  119. {
  120. options.AddPolicy(DefaultCorsPolicyName, builder =>
  121. {
  122. builder
  123. .WithOrigins(
  124. configuration["App:CorsOrigins"]
  125. .Split(",", StringSplitOptions.RemoveEmptyEntries)
  126. .Select(o => o.RemovePostFix("/"))
  127. .ToArray()
  128. )
  129. .WithAbpExposedHeaders()
  130. .SetIsOriginAllowedToAllowWildcardSubdomains()
  131. .AllowAnyHeader()
  132. .AllowAnyMethod()
  133. .AllowCredentials();
  134. });
  135. });
  136. }
  137. }
  138. }