Przeczytaj zmienną z Web.Config

Odpowiedzi:

71

Sugerowałbym, abyś nie modyfikował pliku web.config z twojego, ponieważ za każdym razem, gdy zmiana, uruchomi ponownie twoją aplikację.

Możesz jednak czytać web.config za pomocą System.Configuration.ConfigurationManager.AppSettings

Muhammad Akhtar
źródło
Dziękuję, panie Muhammed, więc co radzisz mi zrobić, aby zapisać zmienną w miejscu publicznym, którą można zmienić bez ponownego tworzenia aplikacji internetowej? Z góry dziękuję
Amira Elsayed Ismail
1
Możesz przechowywać takie zmienne w zaszyfrowanym pliku XML.
vamyip
1
tak, plik XML jest lepszym pomysłem. Lub możesz przechowywać go w DB i dodać do application_start (Global.asax), umieścić go w zmiennej aplikacji i używać ich w aplikacji. te zmienne są przypisywane tylko raz w aplikacji i jeśli aplikacja zostanie ponownie uruchomiona, zostaną one ponownie przypisane.
Muhammad Akhtar
Bardzo dziękuję panu Vamyip i panu Muhammedowi za pomoc
Amira Elsayed Ismail
145

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

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

Przykładowe użycie:

using System.Configuration;

string clientId = ConfigurationManager.AppSettings["ClientId"];
string redirectUrl = ConfigurationManager.AppSettings["RedirectUrl"];
PrateekSaluja
źródło
17
+1 ładna odpowiedź. Jednak jedna uwaga - nie musisz wywoływać ToStringjawnie, ponieważ indeksatorzy sami AppSettingszwracają wartość typustring
horgh
16

Jeśli chcesz mieć podstawy, możesz uzyskać dostęp do kluczy za pośrednictwem:

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

Aby uzyskać dostęp do moich kluczy konfiguracyjnych, zawsze tworzę statyczną klasę w mojej aplikacji. Oznacza to, że mogę uzyskać do nich dostęp, gdziekolwiek potrzebuję i nie używam ciągów w całej mojej aplikacji (jeśli zmieni się w konfiguracji sieciowej, musiałbym przejść przez wszystkie zdarzenia, zmieniając je). Oto próbka:

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; }
    }
}
Lloyd Powell
źródło
7

Zakładając, że klucz znajduje się wewnątrz <appSettings>węzła:

ConfigurationSettings.AppSettings["theKey"];

Co do „pisania” - po prostu nie.

Plik web.config nie jest do tego przeznaczony, jeśli zamierzasz ciągle zmieniać wartość, umieść ją w statycznej klasie pomocniczej.

RPM1984
źródło
0

Jestem klasą siteConfiguration do wywoływania wszystkich moich ustawień appSetting w ten sposób. Podzielę się tym, jeśli komuś to pomoże.

dodaj następujący kod w pliku „web.config”

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

Teraz możesz zdefiniować klasę do pobierania całej wartości appSetting. lubię 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 dodaj odniesienie do poprzedniej klasy i uzyskaj dostęp do wywołania klucza, takiego jak poniżej

string appKeyStringVal= SiteConfigurationReader.appKeyString;
int appKeyIntVal= SiteConfigurationReader.appKeyInt;
int appKeyStringByPassingKey = SiteConfigurationReader.GetAppSettingsInteger("appKeyInt");
reza.cse08
źródło