2010-10-04 15 views

Odpowiedz

54

Proponuję, abyś nie modyfikował web.config ze swojego, ponieważ za każdym razem, gdy się zmieni, uruchomi ponownie twoją aplikację.

Jednak można odczytać pliku web.config przy użyciu System.Configuration.ConfigurationManager.AppSettings

+0

Dziękuję Mr.Muhammed, więc co mi poradzisz zrobić, aby zapisać zmienną w miejscu publicznym, które można zmienić bez ponawiania aplikacji internetowej? Dzięki z góry –

+0

Możesz przechowywać takie zmienne w zaszyfrowanym pliku XML. – vamyip

+0

tak, plik XML jest lepszym pomysłem. Możesz też zapisać go w DB i dodać application_start (Global.asax), umieścić w zmiennej aplikacji i użyć ich w aplikacji. te zmienne są przypisywane tylko raz w aplikacji i jeśli aplikacja zostanie uruchomiona ponownie, zostaną one ponownie przypisane. –

6

Zakładając klucz jest zawarty wewnątrz węzła <appSettings>:

ConfigurationSettings.AppSettings["theKey"]; 

chodzi o "piśmie" - Mówiąc prościej, nie zrobiłem.

Program web.config nie jest przeznaczony do tego celu, jeśli chcesz stale zmieniać wartość, umieść go w statycznej klasie pomocniczej.

102

Biorąc pod uwagę następujące web.config:

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

Przykład użycia:

using System.Configuration; 

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

+1 ładna odpowiedź.Jednak jedna uwaga - nie trzeba jawnie wywoływać 'ToString', ponieważ indeksatory w' AppSettings' zwracają wartość typu 'string' same – horgh

14

Jeśli chcesz się podstaw, można uzyskać dostęp do kluczy poprzez:

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

Aby uzyskać dostęp klucze web config ja zawsze statycznych klasy w mojej aplikacji. Oznacza to, że mogę uzyskać do nich dostęp w dowolnym miejscu i nie używam ciągów w całej mojej aplikacji (jeśli zmieni się w konfiguracji sieci, będę musiał przejść przez wszystkie wystąpienia, które je zmieniają). Oto przykład:

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

Jestem klasy siteConfiguration dla wywoływania całej mojej aplikacjiUstawianie w ten sposób. Dzielę się tym, jeśli to pomoże każdemu.

dodać następujący kod w „web.config”

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

Teraz można zdefiniować klasę uzyskania całą swoją wartość AppSetting. jak to

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

Teraz dodać odniesienie do poprzedniej klasy i uzyskać dostęp do klucza połączenia jak poniżej

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