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.
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étodoConfigureAppConfiguration()
en tu archivoProgram.cs
. Aquí tienes un ejemplo de código:En este fragmento de código, estamos utilizando la propiedad
hostingContext.Configuration
para obtener el valor de la clavecrmEnvironment
, que puede serProduction
,Staging
oDevelopment
. Basándonos en este valor, estamos agregando el archivo json correspondiente usando el métodoAddJsonFile
, 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 decrmEnvironment
.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 comandosdotnet 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:Microsoft.Extensions.Configuration.UserSecrets
:%APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json
.Agrega los datos de configuración sensibles al archivo de secretos de usuario como pares clave-valor, de esta manera:
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.