Connection String Validation
Validate database connection strings in different environments.
Scenario
You need to ensure that:
- Connection strings are present in production and staging
- Connection strings are not empty
- Connection strings have minimum length (basic sanity check)
- Development can use localhost, but production cannot
Configuration Files
appsettings.Production.json
{
"ConnectionStrings": {
"DefaultConnection": "Server=prod-db.example.com;Database=MyApp;User Id=sa;Password=SecureP@ss123"
}
}
appsettings.Development.json
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=MyApp_Dev;Trusted_Connection=True;"
}
}
Validation Rules
sguard.json
{
"version": "1",
"environments": [
{
"id": "dev",
"name": "Development",
"path": "appsettings.Development.json"
},
{
"id": "prod",
"name": "Production",
"path": "appsettings.Production.json"
}
],
"rules": [
{
"id": "connection-string-required",
"environments": ["dev", "prod"],
"rule": {
"id": "db-connection-validation",
"conditions": [
{
"key": "ConnectionStrings:DefaultConnection",
"condition": [
{
"validator": "required",
"message": "Database connection string is required"
},
{
"validator": "min_len",
"value": 20,
"message": "Connection string appears invalid (too short)"
}
]
}
]
}
},
{
"id": "prod-no-localhost",
"environments": ["prod"],
"rule": {
"id": "prod-security-check",
"conditions": [
{
"key": "ConnectionStrings:DefaultConnection",
"condition": [
{
"validator": "ne",
"value": "localhost",
"message": "Production cannot use 'localhost' in connection string"
}
]
}
]
}
}
]
}
Validation Code
using Microsoft.Extensions.DependencyInjection;
using SGuard.ConfigValidation.Extensions;
using SGuard.ConfigValidation.Services.Abstract;
var services = new ServiceCollection();
services.AddSGuardConfigValidation();
var serviceProvider = services.BuildServiceProvider();
var ruleEngine = serviceProvider.GetRequiredService<IRuleEngine>();
// Validate production environment
Console.WriteLine("Validating Production environment...");
var prodResult = await ruleEngine.ValidateEnvironmentAsync("sguard.json", "prod");
if (!prodResult.IsValid)
{
Console.WriteLine("❌ Production validation failed:");
foreach (var error in prodResult.Errors)
{
Console.WriteLine($" - {error}");
}
}
else
{
Console.WriteLine("✅ Production configuration is valid!");
}
// Validate development environment
Console.WriteLine("\nValidating Development environment...");
var devResult = await ruleEngine.ValidateEnvironmentAsync("sguard.json", "dev");
if (!devResult.IsValid)
{
Console.WriteLine("❌ Development validation failed:");
foreach (var error in devResult.Errors)
{
Console.WriteLine($" - {error}");
}
}
else
{
Console.WriteLine("✅ Development configuration is valid!");
}
Expected Output
When Valid
Validating Production environment...
✅ Production configuration is valid!
Validating Development environment...
✅ Development configuration is valid!
When Invalid (Production uses localhost)
Validating Production environment...
❌ Production validation failed:
- Production cannot use 'localhost' in connection string
Validating Development environment...
✅ Development configuration is valid!
CI/CD Integration
Add to your deployment pipeline:
.github/workflows/deploy.yml
- name: Validate Configuration
run: |
dotnet run --project MyApp.ConfigValidator -- prod
if [ $? -ne 0 ]; then
echo "Configuration validation failed"
exit 1
fi
Next Steps
- Validators - Learn about all validators
- Getting Started - Quick start guide