2010-10-04 16 views

risposta

54

Ti suggerisco di non modificare web.config dal tuo, perché ogni volta che cambia, riavvierà l'applicazione.

Tuttavia è possibile leggere web.config usando System.Configuration.ConfigurationManager.AppSettings

+0

Grazie Mr.Muhammed, quindi cosa mi consigli di fare per salvare una variabile in un luogo pubblico che può essere cambiata senza riavviare l'applicazione web? Grazie in anticipo –

+0

È possibile memorizzare tali variabili in un file XML crittografato. – vamyip

+0

sì, il file XML è l'idea migliore. Oppure puoi archiviarlo in DB e aggiungere in application_start (Global.asax), metterlo nella variabile application e usarli nell'applicazione. queste variabili assegnano solo una volta nell'applicazione e se l'applicazione si riavvia, queste verranno assegnate di nuovo. –

6

Supponendo che la chiave è contenuto all'interno del nodo <appSettings>:

ConfigurationSettings.AppSettings["theKey"]; 

Per quanto riguarda la "scrittura" - in parole povere, Dont.

Web.config non è progettato per questo, se si sta modificando un valore costantemente, inserirlo in una classe helper statica.

102

dato il seguente web.config: utilizzo

<appSettings> 
    <add key="ClientId" value="127605460617602"/> 
    <add key="RedirectUrl" value="http://localhost:49548/Redirect.aspx"/> 
</appSettings> 

Esempio:

using System.Configuration; 

string clientId = ConfigurationManager.AppSettings["ClientId"]; 
string redirectUrl = ConfigurationManager.AppSettings["RedirectUrl"]; 
+12

+1 bella risposta.Comunque una nota - non è necessario chiamare 'ToString' in modo esplicito, come indicizzatori su' AppSettings' restituiscono il valore di tipo 'stringa' stessi – horgh

14

Se si desidera che le nozioni di base, è possibile accedere alle chiavi tramite:

string myKey = System.Configuration.ConfigurationManager.AppSettings["myKey"].ToString(); 
string imageFolder = System.Configuration.ConfigurationManager.AppSettings["imageFolder"].ToString(); 

Per accedere le mie chiavi di configurazione web ho sempre fare una classe statica nella mia applicazione. Significa che posso accedervi ovunque io richieda e non sto usando le stringhe su tutta la mia applicazione (se cambia nella configurazione web dovrei passare attraverso tutte le occorrenze modificandole). Ecco un esempio:

using System.Configuration; 

public static class AppSettingsGet 
{  
    public static string myKey 
    { 
     get { return ConfigurationManager.AppSettings["myKey"].ToString(); } 
    } 

    public static string imageFolder 
    { 
     get { return ConfigurationManager.AppSettings["imageFolder"].ToString(); } 
    } 

    // I also get my connection string from here 
    public static string ConnectionString 
    { 
     get { return ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; } 
    } 
} 
0

Sono classe siteConfiguration per chiamare tutte le mie app Impostare come in questo modo. Lo condivido se aiuterà qualcuno.

aggiungere il seguente codice al "web.config"

<configuration> 
    <configSections> 
    <!-- some stuff omitted here --> 
    </configSections> 
    <appSettings> 
     <add key="appKeyString" value="abc" /> 
     <add key="appKeyInt" value="123" /> 
    </appSettings> 
</configuration> 

Ora è possibile definire una classe per ottenere tutto il vostro valore appSetting. Ti piace questa

using System; 
using System.Configuration; 
namespace Configuration 
{ 
    public static class SiteConfigurationReader 
    { 
     public static String appKeyString //for string type value 
     { 
     get 
     { 
      return ConfigurationManager.AppSettings.Get("appKeyString"); 
     } 
     } 

     public static Int32 appKeyInt //to get integer value 
     { 
     get 
     { 
      return ConfigurationManager.AppSettings.Get("appKeyInt").ToInteger(true); 
     } 
     } 

     // you can also get the app setting by passing the key 
     public static Int32 GetAppSettingsInteger(string keyName) 
     { 
      try 
      { 
      return Convert.ToInt32(ConfigurationManager.AppSettings.Get(keyName)); 
     } 
     catch 
     { 
      return 0; 
     } 
     } 
    } 
} 

Ora aggiungere il riferimento della classe precedente e di accedere a una chiamata chiave come muggito

string appKeyStringVal= SiteConfigurationReader.appKeyString; 
int appKeyIntVal= SiteConfigurationReader.appKeyInt; 
int appKeyStringByPassingKey = SiteConfigurationReader.GetAppSettingsInteger("appKeyInt");