Configuration
Overview
Configuration management for AVA applications combining default and application-specific settings.
Install
- ASOL.Core.Identity (≥ 0.0.1.45474-dev)
- IdentityModel (≥ 4.0.0)
- Microsoft.Extensions.Configuration (≥ 8.0.0)
- Microsoft.Extensions.Http.Resilience (≥ 8.1.0)
- Microsoft.Extensions.Resilience (≥ 8.1.0)
Changelog
- 0.0.1.47856-dev
- BREAKING CHANGE: Dependency on ASOL.Core.Identity.Abstractions of the version 0.0.1.47819-dev
Application and Default Configuration

The configuration is managed by the Configuration API described below. Configuration API manages two types of configuration:
| Configuration Type | Purpose | Responsibility |
|---|---|---|
| Default Configuration | Common configuration for all applications, e.g., URLs to shared AVA services. | Managed by internal AVA team |
| Application Configuration | A configuration specific to a particular application code. | Managed by application developers |
Build Number
The DevOps pipeline builds, from both the application and default configuration, a configuration tied to a specific build number. The configuration with a build number is immutable and is strictly tied to the deployed version of the application with the same build number value.
.NET Configuration documentation
Learn more about how configuration works in .NET: Configuration - .NET.
Application configuration management
Application configuration management is provided by the ASOL.Customization.API service.
Swagger: https://{environment}.avaplace.com/api/asol/customization/swagger/index.html
Application configuration endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/Configuration/application/{applicationCode} | Get application configuration |
| GET | /api/v1/Configuration/application/{applicationCode}/simplified | Get application configuration - simplified |
| GET | /api/v1/Configuration/application/{applicationCode}/formatted | Get application configuration - formatted |
| POST | /api/v1/Configuration/application/{applicationCode} | Create new application configuration |
| PUT | /api/v1/Configuration/application/{applicationCode}/code/{code} | Update application configuration |
| DELETE | /api/v1/Configuration/application/{applicationCode}/code/{code} | Delete application configuration |
| GET | /api/v1/ConfigurationProvider?applicationCode={applicationCode}&buildNumber={buildNumber}&accessLevel=Public | Get currently used application configuration for the specified buildNumber |
The application configuration that is retrieved from the application configuration endpoints already contains the common default configuration. So even if no application configuration has been created yet, GET endpoints will return the default and common configuration.
Hierarchy configuration is explained in this chapter - Binding hierarchies
Important:
- Any application configuration changes will take effect after the next application deployment.
- Do not store any passwords or secret information to Configuration API. The data is not encrypted.
Authorization
- The user must be assigned the ASOLEU-Product-AP-.Developer role
- For a concrete application and non-production stages the user must be assigned the
{applicationCode}.Userrole or the{applicationCode}.Ownerrole - For a concrete application and production stages the user must be assigned the
{applicationCode}.Ownerrole
Create application configuration
POST https://{environment}.avaplace.com/api/asol/customization/api/v1/configuration/application/{applicationCode}
Content-Type: application/json
{
"code": "MyOptions:MyTestFrequency",
"value": "1"
}
Update application configuration
PUT https://{environment}.avaplace.com/api/asol/customization/api/v1/configuration/application/{applicationCode}/code/MyOptions:MyTestFrequency
Content-Type: application/json
{
"value": "5"
}
Get application configuration - basic response
GET https://{environment}.avaplace.com/api/asol/customization/api/v1/configuration/application/{applicationCode}
{
"totalCount": 99,
"items": [
// Default configuration
{
"code": "AuthorizationServiceOptions:BaseUrl",
"value": "https://avaplace.com/api/asol/idm",
"isDefault": true
},
// ... other default configuration ...
// Application configuration
{
"code": "MyOptions:MyTestFrequency",
"value": "5",
"isDefault": false
},
// ... other application configuration ...
]
}
Get application configuration - simplified response
Endpoint providing simplified application configuration: key-value format.
GET https://{environment}.avaplace.com/api/asol/customization/api/v1/configuration/application/{applicationCode}/simplified
{
// Default configuration
"AuthorizationServiceOptions:BaseUrl": "https://avaplace.com/api/asol/idm",
// ... other default configuration ...
// Application configuration
"MyOptions:MyTestFrequency": "5",
// ... other application configuration ...
}
Get application configuration - formatted response
Retrieves a preview of JSON formatted application configuration. EXPERIMENTAL FEATURE - do not copy to appsettings.json
GET https://{environment}.avaplace.com/api/asol/customization/api/v1/configuration/application/{applicationCode}/formatted
{
// Default configuration
"AuthorizationServiceOptions": {
"BaseUrl": "https://avaplace.com/api/asol/idm",
"ServiceRoleStrictMode": "Exception"
},
// ... other default configuration ...
// Application configuration
"MyOptions": {
"MyTestFrequency": "5"
}
// ... other application configuration ...
}
Implement and consume application configuration
The implementation for obtaining remote application configuration from the ASOL.Customization.API service is implemented in the NuGet package ASOL.Core.Configuration.
Register ASOL Configuration Source
using ASOL.Core.Configuration.Extensions;
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostBuilderContext, configurationBuilder) => {
configurationBuilder.AddAsolConfiguration(hostBuilderContext.HostingEnvironment);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.AddTelemetryLogger();
or
using ASOL.Core.Configuration.Extensions;
var builder = WebApplication.CreateBuilder(args);
builder.Configuration.AddAsolConfiguration(builder.Environment);
Configuration file appsettings.ava-dev.json for DEV environment
Use the appsettings.ava-dev.json configuration file to store your DEV stage shared secrets.
{
"SsoAuth": {
"Authority": "https://dev.avaplace.com/api/asol/idp",
"ClientId": "ASxOL-MyOwnProject-AP-",
"ClientSecret": "<ADD YOUR DEV STAGE SSO SECRET>"
},
"Messaging": {
"RabbitMq": {
"UserName": "ASxOL-MyOwnProject-AP-",
"Password": "<ADD YOUR DEV STAGE MESSAGING SECRET>"
}
}
}
IsAsolDevStaging and IsAsolDemoStaging
- IsAsolBetaStaging extension method determines whether the application is running in the BETA environment.
- IsAsolDevelopStaging extension method determines whether the application is running in the DEVELOP environment.
- IsAsolDevStaging extension method determines whether the application is running in the DEV environment.
- IsAsolDemoStaging extension method determines whether the application is running in the DEMO environment.
- IsAsolNonProductionStaging extension method determines whether the application is running in the BETA or DEVELOP or DEV or DEMO environment.
// example - show swagger on localhost, beta, develop, dev and demo stage
app.MapWhen(r => r.Request.Path.StartsWithSegments("/swagger")
&& (env.IsDevelopment() || env.IsAsolNonProductionStaging()), cfgPath =>
{
...
});