2010-10-04 32 views

Respuesta

54

Le sugiero que no modifique web.config, ya que cada vez que cambie, reiniciará la aplicación.

Sin embargo se puede leer utilizando web.config System.Configuration.ConfigurationManager.AppSettings

+0

Gracias Sr.Muhammed, ¿qué me aconseja que haga para guardar una variable en un lugar público que se puede cambiar sin volver a configurar la aplicación web? Gracias de antemano –

+0

Puede almacenar dichas variables en un archivo XML cifrado. – vamyip

+0

sí, el archivo XML es la mejor idea. O puede almacenarlo en DB y agregarlo en application_start (Global.asax), ponerlo en la variable de aplicación y usarlos en la aplicación. estas variables se asignan solo una vez en la aplicación y si la aplicación se reinicia, estas se asignarán de nuevo. –

6

Suponiendo que la clave está contenido dentro del nodo <appSettings>:

ConfigurationSettings.AppSettings["theKey"]; 

En cuanto a la "escritura" - en pocas palabras, no haga .

El web.config no está diseñado para eso, si va a cambiar constantemente un valor, póngalo en una clase de ayuda estática.

102

Dada la siguiente web.config: uso

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

Ejemplo:

using System.Configuration; 

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

+1 buena respuesta.Sin embargo, una nota: no es necesario que llame a 'ToString' explícitamente, ya que los indexadores en' AppSettings' devuelven el valor de tipo 'string' – horgh

14

Si desea que los conceptos básicos, puede acceder a través de las teclas:

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

Para tener acceso a las llaves de mi web.config Siempre hago una clase estática en mi solicitud. Significa que puedo acceder a ellos donde sea que lo requiera y no estoy usando las cadenas en toda mi aplicación (si cambia en la configuración web, tendría que pasar por todas las instancias para cambiarlas). Aquí hay un ejemplo:

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

Soy sitio Clase de configuración para llamar a todas mis aplicacionesConfigurando de esta manera. Lo comparto si ayuda a alguien.

agregue el código siguiente en el "web.config"

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

Ahora se puede definir una clase para conseguir todo su valor appSetting. como esto

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

Ahora agregar la referencia de la clase anterior y para acceder a una llamada clave, como abajo

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