Modifier un web.config par programme avec C # (.NET)

93

Comment puis-je modifier / manipuler le par web.configprogrammation avec C #? Puis-je utiliser un objet de configuration et, si oui, comment puis-je charger le web.configdans un objet de configuration? Je voudrais avoir un exemple complet de modification de la chaîne de connexion. Après la modification, le web.configdoit être réécrit sur le disque dur.

Kottan
la source
Consultez son article de blog sur la façon de manipuler par programme web.config dans ASP.NET 2.0 et ASP.NET 3.5. Vous pouvez également vérifier cette question qui a la réponse à votre question. Comment définir une configuration de chaîne de connexion par programme dans .net?
Shoban le

Réponses:

115

Voici un peu de code:

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

Voir plus d'exemples dans cet article , vous devrez peut-être jeter un oeil à l' emprunt d' identité .

Alex LE
la source
Quel est le nom de votre chaîne de connexion dans le fichier web.config?
Alex LE
lien vers l'article est rompu
Vitall
@AlexLE: Comment spécifier l'emplacement du fichier lorsque web.config est placé à un emplacement différent. Peut-être un serveur distant sur un chemin partagé?
SharpCoder
@SharpCoder, le chemin est un chemin virtuel, vous devez donc d'abord copier le fichier web.config du serveur distant vers votre application locale (dans un dossier temporaire pour ne pas remplacer votre propre web.config), le modifier, l'enregistrer puis le recopier au serveur distant. Ou une meilleure solution plus complexe serait: créer une API qui fait son travail (changer de web.config), la déployer sur le serveur distant, puis la consommer à partir du serveur local.
Guilherme Branco Stracini
@Skami vous devez définir le nom de connectionStrings sur "MyConnectionString", ce qui signifie que la valeur de section.ConnectionStrings ["MyConnectionString"] doit correspondre au nom.
Liakat
12
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;
//section.SectionInformation.UnprotectSection();
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();
ASergan
la source
Comment obtenir l'ID utilisateur de la variable de section?
Niks
5

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

voici une URL qui explique plus en détail comment vous pouvez mettre à jour le fichier web.config par programmation.

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

Remarque: si vous apportez des modifications à web.config, ASP.NET détecte ces modifications et rechargera votre application (recycle le pool d'applications) et l'effet de ces données conservées dans la session, l'application et le cache sera perdu (en supposant l'état de la session est InProc et n'utilise pas de serveur d'état ou de base de données).

Shailesh
la source
Je sais que c'est techniquement possible, 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 les serveurs Web de production. Juste mon 2c.
Anthony Horne
2

C'est une méthode que j'utilise pour mettre à jour AppSettings, fonctionne à la fois pour les applications Web et de bureau. Si vous devez 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 la connectionStringssection, Web.Configceux-ci 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);
}
Ogglas
la source
Ce code est bon et je l'ai voté, mais il ne fonctionnera pas si appSettings est défini dans un autre fichier, comme par exemple: <appSettings file = "C: \ Client \ customSettings.config"> </appSettings>
Ben Junior