Saltar al contenido

Actualización de ASP.NET Core appsettings.json en el código

Contamos con el hallazgo a esta impedimento, o por lo menos eso deseamos. Si tienes interrogantes puedes dejarlo en el apartado de preguntas y sin dudarlo te ayudaremos

Solución:

Básicamente puede establecer los valores en IConfiguration como esto:

IConfiguration configuration = ...
// ...
configuration["key"] = "value";

El problema es que, por ejemplo, el JsonConfigurationProvider no implementa el guardado de la configuración en el archivo. Como puede ver en la fuente, no anula el método Set de ConfigurationProvider. (ver fuente)

Puede crear su propio proveedor e implementar el ahorro allí. Aquí (muestra básica del proveedor personalizado de Entity Framework) hay un ejemplo de cómo hacerlo.

Aquí hay un artículo relevante de Microsoft sobre la configuración de las aplicaciones .Net Core:

Configuración principal de Asp.Net

La página también tiene un código de muestra que también puede ser útil.

Actualizar

Pensé que el proveedor en memoria y el enlace a una clase POCO podrían ser de alguna utilidad, pero no funciona como esperaba OP.

La siguiente opción puede ser configurar reloadOnChange parámetro de AddJsonFile para true mientras agrega el archivo de configuración y analiza manualmente el archivo de configuración JSON y realiza los cambios según lo previsto.

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

reloadOnChange solo se admite en ASP.NET Core 1.1 y versiones posteriores.

Actualice el archivo appsettings.json en el tiempo de ejecución central de asp.net

Ejemplo de archivo appsettings.json


  Config: 
     IsConfig: false
  

Código para actualizar la propiedad IsConfig a true


Main()

 AddOrUpdateAppSetting("Config:IsConfig", true);





public static void AddOrUpdateAppSetting(string key, T value) 
            try    

                var filePath = Path.Combine(AppContext.BaseDirectory, "appSettings.json");
                string json = File.ReadAllText(filePath);
                dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json);

                var sectionPath = key.Split(":")[0];
                if (!string.IsNullOrEmpty(sectionPath)) 
                    var keyPath = key.Split(":")[1];
                    jsonObj[sectionPath][keyPath] = value;
                
                else 
                    jsonObj[sectionPath] = value; // if no sectionpath just set the value
                
                string output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented);
                File.WriteAllText(filePath, output);

            
            catch (ConfigurationErrorsException) 
                Console.WriteLine("Error writing app settings");
            
        

Calificaciones y comentarios

Recuerda algo, que tienes la opción de interpretar tu experiencia si acertaste tu enigma .

¡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 *