Читать переменную из Web.Config


Ответы:


72

Я бы посоветовал вам не изменять web.config из вашего, потому что каждый раз при изменении он перезапускает ваше приложение.

Однако вы можете прочитать web.config, используя System.Configuration.ConfigurationManager.AppSettings


Спасибо, мистер Мухаммед, что вы посоветуете мне сделать, чтобы сохранить переменную в общедоступном месте, которую можно изменить без перезапуска веб-приложения? Заранее спасибо
Амира Эльсайед Исмаил

1
Вы можете хранить такие переменные в зашифрованном XML-файле.
vamyip

1
да, XML-файл - лучшая идея. Или вы можете сохранить его в БД и добавить в application_start (Global.asax), поместить его в переменную приложения и использовать их в приложении. эти переменные назначаются в приложении только один раз, и при перезапуске приложения они будут назначены снова.
Мухаммад Ахтар

Большое спасибо, мистер Вамип и мистер Мухаммед, за вашу помощь
Амира Эльсайед Исмаил

147

Учитывая следующий файл web.config:

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

Пример использования:

using System.Configuration;

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

17
+1 хороший ответ. Однако одно замечание - вам не нужно вызывать ToStringявно, поскольку индексаторы для AppSettingsвозвращаемого значения типа stringсами по себе
horgh

16

Если вам нужны основы, вы можете получить доступ к ключам через:

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

Чтобы получить доступ к моим ключам веб-конфигурации, я всегда создаю статический класс в своем приложении. Это означает, что я могу получить к ним доступ везде, где мне нужно, и я не использую строки во всем своем приложении (если они изменяются в веб-конфигурации, мне придется пройти через все вхождения, изменив их). Вот образец:

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

7

Предполагая, что ключ содержится внутри <appSettings>узла:

ConfigurationSettings.AppSettings["theKey"];

Что касается «письма» - проще говоря, не надо.

Web.config не предназначен для этого, если вы собираетесь постоянно изменять значение, поместите его в статический вспомогательный класс.



0

Я класс siteConfiguration для вызова всех моих приложений таким образом. Поделюсь, если это кому-нибудь поможет.

добавьте следующий код в "web.config"

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

Теперь вы можете определить класс для получения всего вашего значения appSetting. как это

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

Теперь добавьте ссылку на предыдущий класс и получите доступ к ключевому вызову, как показано ниже

string appKeyStringVal= SiteConfigurationReader.appKeyString;
int appKeyIntVal= SiteConfigurationReader.appKeyInt;
int appKeyStringByPassingKey = SiteConfigurationReader.GetAppSettingsInteger("appKeyInt");
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.