Saltar al contenido

Obteniendo valor de appsettings.json en .net core

No busques más por otros sitios porque has llegado al espacio correcto, contamos con la solución que deseas pero sin complicarte.

Solución:

Programa y clase de inicio

.NET Core 2.x

No necesitas ser nuevo IConfiguration en el Startup constructor. Su implementación será inyectada por el sistema DI.

// Program.cs
public class Program

    public static void Main(string[] args)
    
        BuildWebHost(args).Run();
    

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup()
            .Build();            


// Startup.cs
public class Startup

    public IHostingEnvironment HostingEnvironment  get; private set; 
    public IConfiguration Configuration  get; private set; 

    public Startup(IConfiguration configuration, IHostingEnvironment env)
    
        this.HostingEnvironment = env;
        this.Configuration = configuration;
    

.NET Core 1.x

Tienes que decir Startup para cargar los archivos de configuración de la aplicación.

// Program.cs
public class Program

    public static void Main(string[] args)
    
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup()
            .UseApplicationInsights()
            .Build();

        host.Run();
    


//Startup.cs
public class Startup

    public IConfigurationRoot Configuration  get; private set; 

    public Startup(IHostingEnvironment env)
    
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.env.EnvironmentName.json", optional: true)
            .AddEnvironmentVariables();

        this.Configuration = builder.Build();
    
    ...

Obtener valores

Hay muchas formas de obtener el valor que configura desde la configuración de la aplicación:

  • Manera simple de usar ConfigurationBuilder.GetValue
  • Utilizando Patrón de opciones

Digamos tu appsettings.json Se ve como esto:


    "ConnectionStrings": 
        ...
    ,
    "AppIdentitySettings": 
        "User": 
            "RequireUniqueEmail": true
        ,
        "Password": 
            "RequiredLength": 6,
            "RequireLowercase": true,
            "RequireUppercase": true,
            "RequireDigit": true,
            "RequireNonAlphanumeric": true
        ,
        "Lockout": 
            "AllowedForNewUsers": true,
            "DefaultLockoutTimeSpanInMins": 30,
            "MaxFailedAccessAttempts": 5
        
    ,
    "Recaptcha":  
        ...
    ,
    ...

Manera simple

Puede inyectar toda la configuración en el constructor de su controlador / clase (a través de IConfiguration) y obtenga el valor que desee con un key:

public class AccountController : Controller

    private readonly IConfiguration _config;

    public AccountController(IConfiguration config)
    
        _config = config;
    

    [AllowAnonymous]
    public IActionResult ResetPassword(int userId, string code)
    
        var vm = new ResetPasswordViewModel
        
            PasswordRequiredLength = _config.GetValue(
                "AppIdentitySettings:Password:RequiredLength"),
            RequireUppercase = _config.GetValue(
                "AppIdentitySettings:Password:RequireUppercase")
        ;

        return View(vm);
    

Patrón de opciones

los ConfigurationBuilder.GetValue funciona muy bien si solo necesita uno o dos valores de la configuración de la aplicación. Pero si desea obtener varios valores de la configuración de la aplicación, o no desea codificarlos key cadenas en varios lugares, podría ser más fácil de usar Patrón de opciones. El patrón de opciones usa clases para representar la jerarquía / estructura.

Para usar el patrón de opciones:

  1. Definir clases para representar la estructura.
  2. Registre la instancia de configuración a la que se unen esas clases
  3. Inyectar IOptions en el constructor del controlador / clase en el que desea obtener valores

1. Definir clases de configuración para representar la estructura.

Puede definir clases con propiedades que necesita coincidir exactamente los keys en la configuración de su aplicación. El nombre de la clase no tiene que coincidir con el nombre de la sección en la configuración de la aplicación:

public class AppIdentitySettings

    public UserSettings User  get; set; 
    public PasswordSettings Password  get; set; 
    public LockoutSettings Lockout  get; set; 


public class UserSettings

    public bool RequireUniqueEmail  get; set; 


public class PasswordSettings

    public int RequiredLength  get; set; 
    public bool RequireLowercase  get; set; 
    public bool RequireUppercase  get; set; 
    public bool RequireDigit  get; set; 
    public bool RequireNonAlphanumeric  get; set; 


public class LockoutSettings

    public bool AllowedForNewUsers  get; set; 
    public int DefaultLockoutTimeSpanInMins  get; set; 
    public int MaxFailedAccessAttempts  get; set; 

2. Registre la instancia de configuración

Y luego debe registrar esta instancia de configuración en ConfigureServices() en la puesta en marcha:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
...

namespace DL.SO.UI.Web

    public class Startup
    
        ...
        public void ConfigureServices(IServiceCollection services)
        
            ...
            var identitySettingsSection = 
                _configuration.GetSection("AppIdentitySettings");
            services.Configure(identitySettingsSection);
            ...
        
        ...
    

3. Inyectar IOptions

Por último, en el controlador / clase que desea obtener los valores, debe inyectar IOptions a través del constructor:

public class AccountController : Controller

    private readonly AppIdentitySettings _appIdentitySettings;

    public AccountController(IOptions appIdentitySettingsAccessor)
    
        _appIdentitySettings = appIdentitySettingsAccessor.Value;
    

    [AllowAnonymous]
    public IActionResult ResetPassword(int userId, string code)
    
        var vm = new ResetPasswordViewModel
        
            PasswordRequiredLength = _appIdentitySettings.Password.RequiredLength,
            RequireUppercase = _appIdentitySettings.Password.RequireUppercase
        ;

        return View(vm);
    

Simplemente cree un archivo AnyName.cs y pegue el siguiente código.

using System;
using System.IO;
using Microsoft.Extensions.Configuration;

namespace Custom

    static class ConfigurationManager
    
        public static IConfiguration AppSetting  get; 
        static ConfigurationManager()
        
            AppSetting = new ConfigurationBuilder()
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("YouAppSettingFile.json")
                    .Build();
        
    

Debe reemplazar el nombre de archivo YouAppSettingFile.json con su nombre de archivo.

Su archivo .json debería verse como a continuación.


    "GrandParent_Key" : 
        "Parent_Key" : 
            "Child_Key" : "value1"
        
    ,
    "Parent_Key" : 
        "Child_Key" : "value2"
    ,
    "Child_Key" : "value3"

Ahora puedes usarlo.
No te olvides de Añadir referencia en tu clase donde quieras usar.

using Custom;

Código para recuperar valor.

string value1 = ConfigurationManager.AppSetting["GrandParent_Key:Parent_Key:Child_Key"];
string value2 = ConfigurationManager.AppSetting["Parent_Key:Child_Key"];
string value3 = ConfigurationManager.AppSetting["Child_Key"];

Añadiendo a la respuesta de David Liang para Núcleo 2.0

appsettings.json los archivos están vinculados a ASPNETCORE_ENVIRONMENT variable.

ASPNETCORE_ENVIRONMENT se puede establecer en cualquier valor, pero el marco admite tres valores: Development, Staging, y Production. Si ASPNETCORE_ENVIRONMENT no está configurado, será predeterminado Production.

Para estos tres valores estos appsettings.ASPNETCORE_ENVIRONMENT.json los archivos son compatibles desde el primer momento – appsettings.Staging.json, appsettings.Development.json y appsettings.Production.json

Los tres archivos json de configuración de aplicaciones anteriores se pueden usar para configurar múltiples entornos.

Ejemplo – appsettings.Staging.json


    "Logging": 
        "IncludeScopes": false,
        "LogLevel": 
            "System": "Information",
            "Microsoft": "Information"
        
    ,
    "MyConfig": "My Config Value for staging."

Usar Configuration["config_var"] para recuperar cualquier valor de configuración.

public class Startup

    public Startup(IHostingEnvironment env, IConfiguration config)
    
        Environment = env;
        Configuration = config;
        var myconfig = Configuration["MyConfig"];
    

    public IConfiguration Configuration  get; 
    public IHostingEnvironment Environment  get; 

Si haces scroll puedes encontrar las observaciones de otros usuarios, tú también tienes la habilidad insertar el tuyo si te apetece.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *