es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo agregar un archivo JSON personalizado a IConfiguration basado en una configuración?

Estoy trabajando en ASP.NET Core 6.0 WebAPI y necesito obtener datos de un sistema CRM (Sales Logix) utilizando la API de Sage SData. Tenemos diferentes entornos de CRM (Producción, Staging, Desarrollo) y quiero poder conectarme (o probar) cualquier entorno desde mi proyecto WebAPI.

Para que esto funcione, me gustaría agregar una clave de configuración (para indicar un entorno de CRM en particular) ya sea en appsettings.json o en launchsetting.json. Por ejemplo, cuando la configuración es “”crmEnvironment”: “Development””, quiero incluir un archivo json personalizado llamado crm-dev.json. De manera similar, para “crmEnvironment”: “Staging”, quiero incluir crm-staging.json.

Cada archivo json personalizado idealmente contiene la URL del CRM, el nombre de usuario y la contraseña.

Por favor, indíqueme cómo puedo agregar condicionalmente archivos de configuración json como se mencionó anteriormente, o si hay alguna mejor forma de lograr resultados similares, considerando la seguridad. Sería ideal si pudiera tener archivos de configuración personalizados encriptados sin tener que alejarme de los estándares, al igual que lo hicimos con los archivos Web.Config al heredar ProtectedConfigurationProvider.

Mi pregunta es similar a la siguiente: https://stackoverflow.com/questions/49046847/how-can-i-add-a-custom-json-file-into-iconfiguration. Pero dado que Program.cs ya no utiliza el método Main(), me pregunto cuál sería la forma correcta de agregar archivos de configuración json personalizados.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para agregar condicionalmente archivos de configuración json basados en una clave de configuración, puedes utilizar el método AddJsonFile en el método ConfigureAppConfiguration() en tu archivo Program.cs. Aquí tienes un ejemplo de código:

    usando Microsoft.AspNetCore.Hosting;
    usando Microsoft.Extensions.Hosting;
    usando Microsoft.Extensions.Configuration;
    
    namespace TuNamespace
    {
        clase pública Programa
        {
            public static void Main(string[] args)
            {
                CreateHostBuilder(args).Build().Run();
            }
    
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureAppConfiguration((hostingContext, config) =>
                    {
                        string crmEnvironment = hostingContext.Configuration["crmEnvironment"];
                        config.AddJsonFile($"appsettings.{crmEnvironment}.json", opcional: false, recargarEnCambio: verdadero);
                    })
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<startup>();
                    });
        }
    }
    

    En este fragmento de código, estamos utilizando la propiedad hostingContext.Configuration para obtener el valor de la clave crmEnvironment, que puede ser Production, Staging o Development. Basándonos en este valor, estamos agregando el archivo json correspondiente usando el método AddJsonFile, que toma el nombre del archivo como parámetro. Ten en cuenta que estamos utilizando la sintaxis $"appsettings.{crmEnvironment}.json" para establecer dinámicamente el nombre del archivo json según el valor de crmEnvironment.

    Para manejar el cifrado de los archivos de configuración personalizados, puedes utilizar el paquete Microsoft.Extensions.Configuration.UserSecrets junto con la herramienta de línea de comandos dotnet user-secrets. Esto te permite almacenar de forma segura datos de configuración sensibles en tu máquina de desarrollo sin incluirlos en los archivos del proyecto o en el código fuente. Aquí tienes un ejemplo:

    1. Instala el paquete Microsoft.Extensions.Configuration.UserSecrets:
    dotnet add package Microsoft.Extensions.Configuration.UserSecrets
    
    1. Haz clic derecho en tu proyecto en Visual Studio y selecciona “Manage User Secrets”. Esto abrirá el archivo de secretos de usuario para tu proyecto, que debería estar ubicado en %APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json.
    2. Agrega los datos de configuración sensibles al archivo de secretos de usuario como pares clave-valor, de esta manera:

    {
      "SalesLogix:Url": "https://miempresa.saleslogix.com/sdata",
      "SalesLogix:Username": "miusuario",
      "SalesLogix:Password": "micontraseña"
    }
    
    1. Modifica tus archivos json personalizados para utilizar los datos de configuración del archivo de secretos de usuario, de esta manera:
    {
      "SalesLogix": {
        "Url": "%SalesLogix:Url%",
        "Username": "%SalesLogix:Username%",
        "Password": "%SalesLogix:Password%"
      }
    }
    

    Ten en cuenta que estamos utilizando la sintaxis %clave% para referenciar la clave correspondiente en el archivo de secretos de usuario. Cuando ejecutes tu proyecto WebAPI, el sistema de configuración reemplazará estos marcadores de posición por los valores reales del archivo de secretos de usuario.

Comments are closed.