Skip to content

Commit 6f1a3a5

Browse files
DangDang
authored andcommitted
Fix configuration validation timing issue
- Move configuration validation to happen before app build - Create temporary configuration and logger for early validation - Remove duplicate validation after app build - Fix nullable reference warning This resolves the deployment issue where environment variables were found but configuration validation still failed.
1 parent a2ee13b commit 6f1a3a5

File tree

1 file changed

+20
-13
lines changed

1 file changed

+20
-13
lines changed

VehicleShowroomManagement/src/WebAPI/Program.cs

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
var envVars = Environment.GetEnvironmentVariables();
5252
foreach (DictionaryEntry envVar in envVars)
5353
{
54-
var key = envVar.Key?.ToString();
54+
var key = envVar.Key.ToString();
5555
if (!string.IsNullOrWhiteSpace(key) && (key.StartsWith("MONGODB_") || key.StartsWith("JWT_") || key.StartsWith("EMAIL_") ||
5656
key.StartsWith("CLOUDINARY_") || key.StartsWith("ConnectionStrings__") ||
5757
key.StartsWith("Jwt__") || key.StartsWith("EmailSettings__") || key.StartsWith("CloudinarySettings__")))
@@ -149,6 +149,24 @@
149149
builder.Configuration.AddJsonFile("appsettings.Docker.json", optional: true);
150150
}
151151

152+
// Validate configuration early (before building the app)
153+
// Create a temporary configuration to validate settings
154+
var tempConfig = new ConfigurationBuilder()
155+
.AddConfiguration(builder.Configuration)
156+
.Build();
157+
158+
// Create a temporary logger for validation
159+
using var loggerFactory = LoggerFactory.Create(builder => builder.AddSerilog());
160+
var tempLogger = loggerFactory.CreateLogger<Program>();
161+
162+
var isConfigValid = await ConfigurationValidator.ValidateConfigurationAsync(tempConfig, tempLogger);
163+
if (!isConfigValid)
164+
{
165+
Log.Fatal("Configuration validation failed. Application cannot start.");
166+
Environment.Exit(1);
167+
}
168+
Log.Information("Configuration validation completed successfully");
169+
152170
// Use Serilog for logging
153171
builder.Host.UseSerilog();
154172

@@ -398,18 +416,7 @@
398416
}
399417
}
400418

401-
// Validate configuration before starting the application
402-
var configLogger = app.Services.GetRequiredService<ILogger<Program>>();
403-
var configuration = app.Services.GetRequiredService<IConfiguration>();
404-
405-
var isConfigValid = await ConfigurationValidator.ValidateConfigurationAsync(configuration, configLogger);
406-
if (!isConfigValid)
407-
{
408-
Log.Fatal("Configuration validation failed. Application cannot start.");
409-
Environment.Exit(1);
410-
}
411-
412-
Log.Information("Configuration validation completed successfully");
419+
// Configuration validation already completed earlier
413420

414421
// Log startup information
415422
Log.Information("Application configuration:");

0 commit comments

Comments
 (0)