वेब से एक कुंजी पढ़ना


284

मैं Web.configवेब लेयर (सेम सोल्यूशन) की तुलना में फाइल से कीज़ को एक अलग लेयर में पढ़ने की कोशिश कर रहा हूँ

यहाँ मैं कोशिश कर रहा हूँ:

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

और यहाँ फ़ाइल appSettingsमें मेरा है Web.config:

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

जब मैं कोड को डीबग करता हूं usernameऔर passwordबस होता है null, तो इसे कुंजियों का मूल्य नहीं मिल रहा है।

मैं इन मूल्यों को पढ़ने के लिए क्या गलत कर रहा हूं?


आपकी वेबसाइट द्वारा इस दूसरे प्रोजेक्ट को कैसे एक्सेस किया जा रहा है?
डेन एटकिन्सन

13
आपका सिंटैक्स सही है । आपने शायद गलत web.config फ़ाइल को संपादित किया है, इसीलिए यह लौटाता है NULL। देर से टिप्पणी लेकिन किसी ने इस ओर इशारा नहीं किया।
हम्माद खान H

1
मेरे साथ यही हुआ, मैं व्यू वेब में था ।config।
JQII

1
केवल वेब प्रोजेक्ट के पास System.Configuration.ConfigurationManager.AppSettings ऑब्जेक्ट तक पहुंच है। अन्य परतें इस ऑब्जेक्ट तक नहीं पहुँच सकतीं क्योंकि वे System.Web को लागू नहीं करती हैं।
हाशिम अख्तर

जवाबों:


475

इसके बजाय WebConfigurationManager वर्ग का उपयोग करने का प्रयास करें। उदाहरण के लिए:

string userName = WebConfigurationManager.AppSettings["PFUserName"]

2
आपके उत्तर के लिए धन्यवाद, मैंने आपकी सिफारिश के अनुसार प्रयास किया और अभी भी वही परिणाम प्राप्त कर रहा हूं। मैं वास्तव में अब ToString पर एक NullReferenceException प्राप्त कर रहा हूं ()
twal

यदि आपको एक शून्य अपवाद मिलता है, तो इसका मतलब है कि सेटिंग नहीं मिल रही है। कुछ ऐसा करने का प्रयास करें: "ऑब्जेक्ट x = WebConfigurationManager.AppSettings [" PFUserame "];" और आपको संभवतः एक शून्य मान मिलेगा जिसका अर्थ है कि यह अनुरोधित सेटिंग नहीं ढूंढ रहा है।
हेक्टर कोरिआ

21
क्या आप सुनिश्चित हैं कि सेटिंग्स सही web.config पर हैं? (मैंने "व्यू" फ़ोल्डर के तहत web.config में अपने मूल्यों को डंप करने से पहले गलती की है और एक टन समय की समस्या का निवारण खो दिया है। यह अपेक्षित के रूप में काम क्यों नहीं कर रहा है।
हेक्टर Correa

महान। मुझे खुशी है कि मैंने ऐसा किया।
हेक्टर कोरी

4
धन्यवाद, आप ToString को छोड़ सकते हैं क्योंकि AppSettings अनुक्रमणिका पहले से ही स्ट्रिंग वापस कर देती है।
पक्षी रण

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

12
सही उत्तर। ToString()हालांकि बेमानी है।
अनार खिलिलोव

9
अगर ऐप कॉन्फिगर में वैल्यू नहीं है तो ToString खतरनाक हो सकती है। वापस करने से पहले ऑब्जेक्ट को फंसाने और नल के लिए परीक्षण करने के लिए बेहतर है। "Mysettings" कॉन्फ़िगरेशन में नहीं होने पर इसे चलाने का प्रयास करें और आप अपवाद पॉप देखेंगे। इसके बजाय नीचे whats की तरह कुछ सुरक्षित हो सकता है ... स्ट्रिंग कुंजी = "mysettings"; स्ट्रिंग मान = configurationManager.AppSettings [कुंजी]; if (मान == null) मान = "अज्ञात मान";
जो हीली

1
सच है कि .ToString () के लिए कोई ज़रूरत नहीं है क्योंकि यह एक स्ट्रिंग है
रोला

2
@ जॉयहाइली आप इसे छोटा कर सकते हैं और अशक्त string value = ConfigurationManager.AppSettings[key] ?? "unknown value"
सहकर्मी

मैं सोच रहा हूँ कि ओपी के प्रश्न में इस उत्तर और कोड के बीच अंतर क्या है! क्या वे समान नहीं हैं?
user1451111

6

यदि कॉलर कोई अन्य प्रोजेक्ट है, तो आपको कॉलर प्रोजेक्ट में कॉन्फिग को लिखना चाहिए न कि कॉलिंग को।


6

मुझे यह समाधान काफी मददगार लगा । यह कॉन्फ़िगरेशन प्रबंधक को लपेटने के लिए C # 4.0 डायनामिकऑब्जेक्ट का उपयोग करता है। इसलिए इस तरह मूल्यों तक पहुँचने के बजाय:

 WebConfigurationManager.AppSettings["PFUserName"]

आप उन्हें एक संपत्ति के रूप में एक्सेस करते हैं:

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

EDIT : कोड स्निपेट जोड़ने की स्थिति में बासी हो जाता है:

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

दो Web.config फाइलें होंगी। मुझे लगता है कि आप उन दो फ़ाइलों के साथ भ्रमित हो सकते हैं।

इस छवि की जाँच करें:

इस लिंक पर क्लिक करें और इस छवि की जाँच करें

इस इमेज में आप दो Web.config फाइल्स देख सकते हैं। आपको अपने कॉन्स्टेंट को उसी में जोड़ना चाहिए जो प्रोजेक्ट फ़ोल्डर में है न कि व्यू फोल्डर में

आशा है कि यह आपकी मदद कर सकता है


1

यह समस्या होती है यदि यह प्रोजेक्ट किसी अन्य प्रोजेक्ट द्वारा उपयोग किया जा रहा है। सुनिश्चित करें कि आप पैरेंट प्रोजेक्ट के app.config या web.config में ऐप सेटिंग कीज़ कॉपी करें।


1

इसके अलावा, आप app.configफ़ाइल से स्ट्रिंग मान प्राप्त करने के लिए इस लाइन को आज़मा सकते हैं ।

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

0

नीचे .config फ़ाइल में सेटिंग संभालने के साथ:

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

इसे इस्तेमाल करे:

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

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

-5

क्षमा करें, मैंने इसका परीक्षण नहीं किया है लेकिन मुझे लगता है कि यह इस तरह किया गया है:

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

//usage: config.AppSettings["xxx"]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.