aspnet-core-appsettings-json

Configuración y archivo appsettings.json en ASP.NET

  • 3 min

El archivo appsettings.json es un archivo de configuración principal de cualquier aplicación de ASP.NET.

Es un fichero en formato JSON que se utiliza en aplicaciones ASP.NET para almacenar valores de configuración.

Estos valores pueden incluir cadenas de conexión a bases de datos, claves de API, configuraciones de logging, y cualquier otro dato que necesitemos para que nuestra aplicación funcione.

No almacenar datos sensibles en appsettings.json: Para claves de API, contraseñas y otros datos sensibles, utiliza Azure Key Vault o Secretos de usuario en desarrollo.

Creación del archivo appsettings.json

Cuando creas un nuevo proyecto ASP.NET Core, el archivo appsettings.json se genera automáticamente en la raíz del proyecto.

Si en algún momento no está, no pasa nada. Simplemente puedes crearlo manualmente.

Un archivo appsettings.json típico tiene una estructura similar a la siguiente:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Database=MyDatabase;User Id=sa;Password=MyPassword;"
  },
  "AppSettings": {
    "ApiKey": "12345-ABCDE-67890-FGHIJ",
    "MaxItemsPerPage": 50,
    "FeatureFlags": {
       "EnableNewFeature": true,
       "EnableExperimentalFeature": false
     }
  }
}

En este ejemplo:

  • Logging: Configura el nivel de logging de la aplicación.
  • AllowedHosts: Define los hosts permitidos para la aplicación.
  • ConnectionStrings: Contiene las cadenas de conexión a bases de datos.
  • AppSettings: Almacena configuraciones personalizadas de la aplicación.

Para agregar configuraciones personalizadas, simplemente añade las nuevas secciones y claves en el archivo.

Acceso a los valores de configuración en el código

Una vez que hemos definido nuestras configuraciones en appsettings.json, necesitamos acceder y leer estos valores desde nuestro código.

ASP.NET Core lo hace fácil gracias a la interfaz IConfiguration, que se inyecta automáticamente por el sistema de inyección de dependencias.

public class MyService
{
    private readonly IConfiguration _configuration;

    public MyService(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public void PrintApiKey()
    {
        var apiKey = _configuration["AppSettings:ApiKey"];
        Console.WriteLine($"API Key: {apiKey}");
    }
}

En este ejemplo, accedemos al valor de ApiKey utilizando la clave AppSettings:ApiKey. El carácter : se utiliza para navegar por la jerarquía del archivo JSON.

Configuración fuertemente tipada

También es posible aplicar configuraciones fuertemente tipadas, mediante el mapeo del JSON a una clase C#.

Esto puede contribuir a la claridad del código y prevenir errores (y os hace sentir más tranquilos si sois adictos al tipado 😋)

Para ello, primero defines la clase que represente tu configuración:

public class AppSettings
{
    public string ApiKey { get; set; }
    public int MaxItemsPerPage { get; set; }
    public FeatureFlags FeatureFlags { get; set; }
}

public class FeatureFlags
{
    public bool EnableNewFeature { get; set; }
    public bool EnableExperimentalFeature { get; set; }
}

Ahora en el archivo Program.cs, configuramos la vinculación con appsettings.json,

public class Startup
{
    public IConfiguration Configuration { get; }

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
    }
}

Finalmente accedes con IOptions<T>:

public class MyService
{
    private readonly AppSettings _appSettings;

    public MyService(IOptions<AppSettings> appSettings)
    {
        _appSettings = appSettings.Value;
    }

    public void PrintApiKey()
    {
        Console.WriteLine($"API Key: {_appSettings.ApiKey}");
    }
}