Cambiar un web.config mediante programación con C# (.NET)
¿Cómo puedo modificar/manipular web.config
programáticamente con C#? ¿Puedo usar un objeto de configuración y, en caso afirmativo, cómo puedo cargarlo web.config
en un objeto de configuración? Me gustaría tener un ejemplo completo de cómo cambiar la cadena de conexión. Después de la modificación, se web.config
debe volver a escribir en el disco duro.
Aquí hay un código:
var configuration = WebConfigurationManager.OpenWebConfiguration("~");
var section = (ConnectionStringsSection)configuration.GetSection("connectionStrings");
section.ConnectionStrings["MyConnectionString"].ConnectionString = "Data Source=...";
configuration.Save();
Vea más ejemplos en este artículo , es posible que necesite echar un vistazo a la suplantación .
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;
//section.SectionInformation.UnprotectSection();
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();
Dado que el archivo web.config es un archivo xml, puede abrir web.config usando la clase xmldocument. Obtenga el nodo de ese archivo xml que desea actualizar y luego guarde el archivo xml.
Aquí hay una URL que explica con más detalle cómo se puede actualizar el archivo web.config mediante programación.
http://patelshailesh.com/index.php/update-web-config-programmatically
Nota: si realiza algún cambio en web.config, ASP.NET detecta esos cambios y recargará su aplicación (reciclaje del grupo de aplicaciones) y el efecto es que los datos guardados en la sesión, la aplicación y el caché se perderán (asumiendo el estado de la sesión). es InProc y no utiliza un servidor de estado ni una base de datos).
Este es un método que utilizo para actualizar AppSettings y funciona tanto para aplicaciones web como de escritorio. Si necesita editar cadenas de conexión, puede obtener ese valor System.Configuration.ConnectionStringSettings config = configFile.ConnectionStrings.ConnectionStrings["YourConnectionStringName"];
y luego establecer un nuevo valor con config.ConnectionString = "your connection string";
. Tenga en cuenta que si tiene algún comentario en la connectionStrings
sección, Web.Config
estos serán eliminados.
private void UpdateAppSettings(string key, string value)
{
System.Configuration.Configuration configFile = null;
if (System.Web.HttpContext.Current != null)
{
configFile =
System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
}
else
{
configFile =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
}
var settings = configFile.AppSettings.Settings;
if (settings[key] == null)
{
settings.Add(key, value);
}
else
{
settings[key].Value = value;
}
configFile.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
}