Modificare un web.config a livello di codice con C # (.NET)


93

Come posso modificare / manipolare il web.configprogrammaticamente con C #? Posso utilizzare un oggetto di configurazione e, in caso affermativo, come posso caricarlo web.configin un oggetto di configurazione? Vorrei avere un esempio completo che modifica la stringa di connessione. Dopo la modifica, web.configdovrebbe essere riscritto sul disco rigido.


Controlla il suo post sul blog su come manipolare web.config a livello di programmazione in ASP.NET 2.0 e ASP.NET 3.5. In alternativa, controlla questa domanda che contiene la risposta alla tua domanda. Come imposto una configurazione della stringa di connessione in modo programmatico in .net?
Shoban

Risposte:


115

Ecco un po 'di codice:

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

Vedi altri esempi in questo articolo , potresti dover dare un'occhiata al furto d'identità .


Qual è il nome della stringa di connessione nel file web.config?
Alex LE

il collegamento all'articolo è interrotto
Vitall

@AlexLE: come si specifica la posizione del file quando web.config è posizionato in una posizione diversa. Può essere un server remoto su un percorso condiviso?
SharpCoder

@SharpCoder, il percorso è un percorso virtuale, quindi devi prima copiare il web.config dal server remoto alla tua applicazione locale (all'interno di una cartella temporanea per non sovrascrivere il tuo web.config), modificarlo, salvarlo e poi copiarlo al server remoto. O una soluzione migliore e più complessa sarebbe: creare un'API che funzioni (modifica de web.config), distribuirla sul server remoto e quindi utilizzarla dal server locale.
Guilherme Branco Stracini

@Skami devi impostare il nome connectionStrings su "MyConnectionString", il che significa che il valore section.ConnectionStrings ["MyConnectionString"] deve corrispondere al nome.
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();

Come ottenere l'ID utente dalla variabile di sezione?
Niks

5

Poiché il file web.config è un file xml, puoi aprire web.config usando la classe xmldocument. Ottieni il nodo da quel file xml che desideri aggiornare e quindi salva il file xml.

ecco l'URL che spiega in modo più dettagliato come aggiornare il file web.config a livello di programmazione.

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

Nota: se si apportano modifiche a web.config, ASP.NET rileva tali modifiche e ricaricherà l'applicazione (ricicla il pool di applicazioni) e l'effetto di ciò è che i dati conservati in Sessione, Applicazione e Cache andranno persi (presupponendo lo stato della sessione è InProc e non utilizza un server di stato o un database).


So che è tecnicamente possibile, penso che il metodo sanzionato / approvato da Microsoft sarà probabilmente più duraturo e meno soggetto a rompere il web.config. Abbiamo tutti aggiornato questi file "manualmente", ma penso che sia rischioso con i server web di produzione. Solo il mio 2c.
Anthony Horne

2

Questo è un metodo che utilizzo per aggiornare AppSettings, funziona sia per applicazioni web che desktop. Se è necessario modificare connectionStrings, è possibile ottenere quel valore da System.Configuration.ConnectionStringSettings config = configFile.ConnectionStrings.ConnectionStrings["YourConnectionStringName"];e quindi impostare un nuovo valore con config.ConnectionString = "your connection string";. Nota che se hai commenti nella connectionStringssezione, Web.Configquesti verranno rimossi.

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

Questo codice è buono e l'ho votato in più, ma non funzionerà se appSettings è definito in un altro file, come ad esempio: <appSettings file = "C: \ Client \ customSettings.config"> </appSettings>
Ben Junior
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.