launchSettings
NO se despliega. Afecta a tu entorno local.
En él establecemos los perfiles con los que ejecutaremos nuestro proyecto y se usa para definir la variable ASPNETCORE_ENVIRONMENT
. También permite establecer la url y puertos de ejecución.
{
"profiles": {
"my.project.namespace": {
"commandName": "Project",
"launchBrowser": false,
"applicationUrl": "https://localhost:5011;http://localhost:5010",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
ASPNETCORE_ENVIRONMENT
Indica el entorno - soporta los siguientes valores
Development
Staging
Production
valor por defecto si se omite el valor
appsettings
Se utiliza para almacenar la configuración de la aplicación como por ej. cadenas de conexión de BBDD.
Se utiliza tanto en entornos de desarrollo como de producción.
{
"LocalDirectory": "/opt/data-download",
"MyServiceConfig": {
"Uri": "http://localhost:8800",
"Endpoint": "/some-endpoint",
"Timeout": 30
}
}
appsettings.{Environment}.json
Son archivos adicionales opcionales, donde {Environment}
corresponde al valor de la variable ASPNETCORE_ENVIRONMENT
del launchSettings.json
.
El orden de carga es:
appsettings.json
appsettings.{Environment}.json
(si existe)launchSettings.json
Hay varias maneras de leer la configuración.
leer de la raiz
Las que se encuentran en la raiz las podemos leer inyectando la config en la clase.
public class MyService(IConfiguration _config) : IMyService
{
public void MyMethod()
{
var localDirectory = _config["LocalDirectory"];
}
}
leer de una clase de config custom
por un lado tenemos la clase de config
public class MyServiceConfig
{
public const string Section = "MyServiceConfig";
public string Uri { get; set; }
public string Endpoint { get; set; }
public int Timeout { get; set; }
}
y por otro lado la inyectamos
public class MyService(MyServiceConfig _config) : IMyService
{
public void MyMethod()
{
var uri = _config.Uri;
var endpoint = _config.Endpoint;
var timeout = _config.Timeout;
}
}
la tendremos que poner también en el Startup
public void ConfigureServices(IServiceCollection services)
{
// ...
services.Configure<MyServiceConfig>(config.GetSection(MyServiceConfig.Section));
// ...
}
Buenas prácticas
Usar appsettings.json
como base y en cada appsettings.{Environment].json
poner solo los datos que cambien.
No poner secretos en appsettings.json
ni sus variantes:
- En local (para development) utilizar User secrets
- Para los entornos con Kubernetes inyectar secretos via
ConfigMaps
oSecrets
Reference(s)
https://learn.microsoft.com/es-es/aspnet/core/fundamentals/environments?view=aspnetcore-8.0
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-8.0