ASP.NET CORE

Configuración en ASP.NET Core Mediante Archivos JSON

El proceso de configuración en ASP.NET Core mediante archivos appsettings.json y sus variantes appsettings.{Environment}.json, se realiza de forma implícita por medio de proveedores u orígenes de configuración, que en la mayoría de escenarios, es suficiente.

Sin embargo, hay casos estrictamente necesarios en los cuales se requiere si requiere añadir archivos JSON adicionales de forma explícita, y para realizar esta tarea existe el método de extensión AddJsonFile perteneciente al proveedor JsonConfigurationProvider, el cual carga la configuración desde pares clave-valor en tiempo de ejecución.

La sobrecarga del método AddJsonFile más usada es en la que se define los siguientes parámetros:

  1. Path: Ruta relativa de acceso al archivo JSON.
  2. Optional: Establece si el archivo es opcional, indicándole así al proveedor de configuración que no lance una excepción de tipo FileNotFoundException si no encuentra el archivo.
  3. ReloadOnChange: Indica si el archivo se debe volver a cargar cuando su contenido cambie, sin la necesidad de volver a iniciar la aplicación.
¡Importante!
¡IMPORTANTE!

Hay que tener presente, que la recarga automática de configuración conlleva a que ASP.NET Core configure e inicie un observador de archivos en segundo plano, lo que podría ocasionar problemas de rendimiento si se tienen demasiados archivos. Además, en la práctica no es común cambiar archivos de configuración en ambientes de producción, sin embargo, puede implementar este enfoque en escenarios estrictamente necesarios.

Considere el siguiente archivo personalizado DbSettings.json:

DbSettings.json
{
   "MongoDbSettings": {
      "Host": "localhost",
      "Port": 27017
   }
}

En el siguiente código se carga el archivo DbSettings.json:

Program.cs
var builder = WebApplication.CreateBuilder(args);

builder.Configuration.Sources.Clear();
builder.Configuration.AddJsonFile("DbSettings.json", optional: false, reloadOnChange: true);

builder.Services.ConfigureHttpJsonOptions(options =>
{
    options.SerializerOptions.WriteIndented = true;
});

var app = builder.Build();

app.MapGet("/", () => app.Configuration.AsEnumerable());

app.Run();

En el código anterior:

Resultado
[
  {
    "key": "MongoDbSettings",
    "value": null
  },
  {
    "key": "MongoDbSettings:Port",
    "value": "27017"
  },
  {
    "key": "MongoDbSettings:Host",
    "value": "localhost"
  }
]

En caso de que el archivo haya sido agregado como no opcional, y al momento de cargarlo no se encuentre, se lanzara la siguiente excepción:

FileNotFoundException
System.IO.FileNotFoundException
HResult=0x80070002
Message=The configuration file 'DbSettings.json' was not found and is not optional. The expected physical path was 'C:\ConfiguracionJsonAspNetCore\DbSettings.json'.
Source=Microsoft.Extensions.Configuration.FileExtensions
StackTrace:
 at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(Boolean reload)
 at Microsoft.Extensions.Configuration.ConfigurationManager.AddSource(IConfigurationSource source)
 at Microsoft.Extensions.Configuration.ConfigurationManager.Microsoft.Extensions.Configuration.IConfigurationBuilder.Add(IConfigurationSource source)
 at Microsoft.Extensions.Configuration.JsonConfigurationExtensions.AddJsonFile(IConfigurationBuilder builder, String path, Boolean optional, Boolean reloadOnChange)
 at Program.<Main>$(String[] args) in C:\ConfiguracionJsonAspNetCore\Program.cs:line 3
¡Importante!
¡IMPORTANTE!

Hay que tener muy presente el orden en el cual se agregan los archivos, ya que, dependiendo de eso, sus valores serán sobrescritos o reemplazados.

Artículos Relacionados

Recursos Adicionales