ConfigurationManager kullanarak Web.Config öğesinden bir anahtarı okuma


284

Anahtarları okumaya çalışıyorum Web.configWeb katmanından farklı bir katmandaki dosyadan (Aynı çözüm)

İşte ne çalışıyorum:

string userName = System.Configuration.ConfigurationManager.AppSettings["PFUserName"];
string password = System.Configuration.ConfigurationManager.AppSettings["PFPassWord"];

Ve burada benim olayım appSettingsiçinde Web.configdosyanın:

<configuration>
   ....
   <appSettings>
      <add key="PFUserName" value="myusername"/>
      <add key="PFPassWord" value="mypassword"/>
   </appSettings>
   ....
</configuration>

Ben kod hata ayıklama usernameve passwordsadece null, bu yüzden anahtarların değerini almıyor.

Bu değerleri okumak için neyi yanlış yapıyorum?


Bu ikinci projeye web sitenizden nasıl erişiliyor?
Dan Atkinson

13
Sözdiziminiz doğru . Muhtemelen yanlış web.config dosyasını düzenlediniz, bu yüzden geri dönüyor NULL. Geç yorum ama kimse bunu işaret etti.
Hammad Khan

1
Bana olan buydu, Views web.config'indeydim.
JQII

1
System.Configuration.ConfigurationManager.AppSettings nesnesine yalnızca Web projesi erişebilir. Diğer katmanlar, System.Web uygulamadığından bu nesneye erişemez.
Hashim Akhtar

Yanıtlar:


475

Bunun yerine WebConfigurationManager sınıfını kullanmayı deneyin. Örneğin:

string userName = WebConfigurationManager.AppSettings["PFUserName"]

2
Cevabınız için teşekkürler, önerdiğiniz gibi denedim ve yine de aynı sonucu elde ettim. Aslında şimdi bir NullReferenceException ToString ()
twal

Boş bir istisna alırsanız, bu ayarın bulunmadığı anlamına gelir. Bunun gibi bir şey yapmayı deneyin: "object x = WebConfigurationManager.AppSettings [" PFUserName "];" ve büyük olasılıkla boş bir değer elde edersiniz, bu da istenen ayarı bulamadığı anlamına gelir.
Hector Correa

21
Ayarların doğru web.config dosyasında olduğundan emin misiniz? (Değerlerimi web.config dosyasına "Views" klasörü altına dökmeden önce hata yaptım ve neden beklendiği gibi çalışmadığını gidermek için tonlarca zaman kaybettim.
Hector Correa

Harika. Memnun oldum.
Hector Correa

4
Teşekkür ederiz, AppSettings dizinleyici zaten dize döndürdüğü için ToString'i bırakabilirsiniz.
Ido Ran

43
  var url = ConfigurationManager.AppSettings["ServiceProviderUrl"];

12
Doğru cevap. ToString()gerçi gereksizdir.
anar khalilov

9
Değer, uygulama yapılandırmasında yoksa ToString tehlikeli olabilir. Döndürülen nesneyi yakalamak ve çözmeden önce null için test etmek daha iyidir. "Mysettings" yapılandırmada olmadığında çalıştırmayı deneyin ve istisna pop'sunu göreceksiniz. Bunun yerine aşağıdaki gibi bir şey daha güvenli olabilir ... string key = "mysettings"; string value = ConfigurationManager.AppSettings [anahtar]; if (value == null) value = "bilinmeyen değer";
Joe Healy

1
Bir dize olduğu için .ToString () yöntemine gerek yoktur
Rola

2
@JoeHealy Bunu boş birleştirici operatör ile kısaltabilir ve netliği artırabilirsiniz:string value = ConfigurationManager.AppSettings[key] ?? "unknown value"
Zenexer

Bu soru ile OP'nin sorusundaki kod arasındaki farkın ne olduğunu merak ediyorum! Aynı değiller mi?
user1451111

6

Arayan başka bir projeyse, yapılandırmayı arayan projeye değil, arayan projeye yazmalısınız.


6

Bu çözümü oldukça faydalı buldum . ConfigurationManager'ı sarmak için C # 4.0 DynamicObject kullanır. Dolayısıyla, bu gibi değerlere erişmek yerine:

 WebConfigurationManager.AppSettings["PFUserName"]

onlara mülk olarak erişirsiniz:

dynamic appSettings = new AppSettingsWrapper();
Console.WriteLine(appSettings.PFUserName);  

DÜZENLEME : Bağlantının eski olması durumunda kod snippet'i ekleme:

public class AppSettingsWrapper : DynamicObject
{
     private NameValueCollection _items;

    public AppSettingsWrapper()
    {
        _items = ConfigurationManager.AppSettings;
    }

     public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        result = _items[binder.Name];
        return result != null;
    }
}

2

Bunun için tam yol

System.Configuration.ConfigurationManager.AppSettings["KeyName"]

2

İki Web.config dosyası olacaktır. Sanırım bu iki dosyayla karışmış olabilirsiniz.

Bu resmi kontrol et:

bu bağlantıyı tıklayın ve bu resmi kontrol edin

Bu görüntüde iki Web.config dosyası görebilirsiniz. Sabitler görünümler klasöründe olmayan proje klasöründe ekleyin

Umarım bu sana yardımcı olabilir


1

Bu sorun, bu proje başka bir proje tarafından kullanılıyorsa oluşur. Uygulama ayar anahtarlarını üst projenin app.config veya web.config dosyasına kopyaladığınızdan emin olun.


1

Ayrıca app.configdosyadan dize değeri almak için bu satırı deneyebilirsiniz .

var strName= ConfigurationManager.AppSettings["stringName"];

0

.config dosyasında aşağıdaki ayar varsayarak:

<configuration>
   <appSettings>
     <add key="PFUserName" value="myusername"/>
     <add key="PFPassWord" value="mypassword"/>
   </appSettings> 
</configuration>

bunu dene:

public class myController : Controller
{
    NameValueCollection myKeys = ConfigurationManager.AppSettings;

    public void MyMethod()
    {
        var myUsername = myKeys["PFUserName"];
        var myPassword = myKeys["PFPassWord"];
    }
}

-5

Üzgünüm bunu test etmedim ama bence böyle yaptım:

var filemap = new System.Configuration.ExeConfigurationFileMap();            
System.Configuration.Configuration config =  System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(filemap, System.Configuration.ConfigurationUserLevel.None);

//usage: config.AppSettings["xxx"]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.