97 votes

Modifier un web.config de manière programmatique avec C# (.NET)

Comment puis-je modifier / manipuler le web.config par programmation avec C# ? Puis-je utiliser un objet de configuration et, si oui, comment puis-je charger l'objet de configuration ? web.config dans un objet de configuration ? J'aimerais avoir un exemple complet de modification de la chaîne de connexion. Après la modification, l'objet web.config doit être réécrite sur le disque dur.

0 votes

Consultez son article de blog sur la façon de Manipulation programmatique de web.config en ASP.NET 2.0 et ASP.NET 3.5 Vous pouvez également consulter cette question qui contient la réponse à votre question. Comment définir la configuration d'une chaîne de connexion par programme en .net ?

120voto

Alex LE Points 6277

Voici un peu de code :

var configuration = WebConfigurationManager.OpenWebConfiguration("~");
var section = (ConnectionStringsSection)configuration.GetSection("connectionStrings");
section.ConnectionStrings["MyConnectionString"].ConnectionString = "Data Source=...";
configuration.Save();

Voir d'autres exemples dans cet article Il se peut que vous deviez jeter un coup d'œil à l'adresse suivante usurpation d'identité .

0 votes

Quel est le nom de votre chaîne de connexion dans le fichier web.config ?

0 votes

Le lien vers l'article est cassé

0 votes

@AlexLE : Comment spécifier l'emplacement du fichier lorsque le web.config est placé à un endroit différent. Il peut s'agir d'un serveur distant sur un chemin partagé ?

12voto

ASergan Points 96
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;
//section.SectionInformation.UnprotectSection();
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();

0 votes

Comment obtenir l'identifiant de l'utilisateur à partir d'une variable de section ?

6voto

shailesh Points 1472

Le fichier web.config étant un fichier xml, vous pouvez l'ouvrir à l'aide de la classe xmldocument. Récupérez dans ce fichier xml le nœud que vous souhaitez mettre à jour, puis enregistrez le fichier xml.

Voici l'URL qui explique plus en détail comment vous pouvez mettre à jour le fichier web.config de manière programmatique.

http://patelshailesh.com/index.php/update-web-config-programmatically

Remarque : si vous modifiez le fichier web.config, ASP.NET détecte ces modifications et recharge votre application (recycle le pool d'applications), ce qui a pour effet de perdre les données conservées dans la session, l'application et le cache (en supposant que l'état de la session est InProc et n'utilise pas un serveur d'état ou une base de données).

0 votes

Je sais que c'est techniquement possible, mais je pense que la méthode sanctionnée/approuvée par Microsoft est susceptible d'être plus durable et moins sujette à casser le web.config. Nous avons tous mis à jour ces fichiers "à la main", mais je pense que c'est risqué avec des serveurs web de production. Ce n'est que mon avis.

2voto

Ogglas Points 1

Il s'agit d'une méthode que j'utilise pour mettre à jour les AppSettings, et qui fonctionne aussi bien pour les applications web que pour les applications de bureau. Si vous avez besoin de modifier connectionStrings, vous pouvez obtenir cette valeur à partir de System.Configuration.ConnectionStringSettings config = configFile.ConnectionStrings.ConnectionStrings["YourConnectionStringName"]; puis définir une nouvelle valeur avec config.ConnectionString = "your connection string"; . Notez que si vous avez des commentaires dans le connectionStrings section dans Web.Config ces derniers seront supprimés.

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);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X