কনফিগারেশনম্যানেজার ব্যবহার করে ওয়েব.কনফিগ থেকে একটি কী পড়া


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
আপনার সিনট্যাক্সটি সঠিক । আপনি সম্ভবত ভুল ওয়েব কোডজিগ ফাইল সম্পাদনা করেছেন যার কারণে এটি ফিরে আসে NULL। দেরিতে মন্তব্য করেছেন কিন্তু কেউ এটিকে নির্দেশ করেননি।
হামাদ খান

1
আমার সাথে এটি ঘটেছে, আমি ভিউজ ওয়েব কনফাইগে ছিলাম।
JQII

1
কেবলমাত্র ওয়েব প্রকল্পে সিস্টেম.সংস্করণ। কনফিগারেশন ম্যানেজ.অর অ্যাপ্লিকেশন সেটিং অবজেক্টে অ্যাক্সেস রয়েছে। অন্যান্য স্তরগুলি বস্তুটি অ্যাক্সেস করতে পারে না কারণ তারা সিস্টেমটি প্রয়োগ করে না e ওয়েবে।
হাশিম আক্তার

উত্তর:


475

পরিবর্তে ওয়েব কনফিগারেশন ম্যানেজার ক্লাসটি ব্যবহার করে দেখুন। উদাহরণ স্বরূপ:

string userName = WebConfigurationManager.AppSettings["PFUserName"]

2
আপনার উত্তরের জন্য ধন্যবাদ, আমি আপনার প্রস্তাবিত হিসাবে চেষ্টা করেছি এবং এখনও একই ফলাফল পেতে। আমি এখন টুস্ট্রিং ()
টু

যদি আপনি কোনও নাল ব্যতিক্রম পান তবে এর অর্থ সেটিংসটি খুঁজে পাওয়া যাচ্ছে না। এই জাতীয় কিছু করার চেষ্টা করুন: "অবজেক্ট x = ওয়েবসফিকেশনমেনেজআরএপ অ্যাপসেটেটিংস [" পিএফউজারনেম "];" এবং আপনি সম্ভবত একটি নাল মান পাবেন যার অর্থ এটি অনুরোধ করা সেটিংসটি খুঁজে পাচ্ছে না।
হেক্টর Correa

21
আপনি কি নিশ্চিত যে সেটিংসটি সঠিক ওয়েবকনফাইগে রয়েছে? ("ভিউজ" ফোল্ডারের অধীনে ওয়েবকনফিগটিতে আমার মানগুলি ফেলে দেওয়ার আগে আমি ভুল করে ফেলেছি এবং কেন এটি প্রত্যাশার মতো কাজ করছে না তা সমস্যা সমাধানের জন্য অনেক সময় হারিয়েছি
হেক্টর কোরিয়া

গ্রেট। আমি এটা খুশি।
হেক্টর Correa

4
আপনাকে ধন্যবাদ, আপনি টসস্ট্রিংটি ড্রপ করতে পারেন কারণ অ্যাপসেটিংস সূচক ইতিমধ্যে স্ট্রিংটি ফিরে এসেছে।
ইডো রান

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

12
সঠিক উত্তর. ToString()অপ্রয়োজনীয় যদিও।
আনার খলিলভ

9
টুস্ট্রিং বিপজ্জনক হতে পারে যদি মানটি অ্যাপ্লিকেশন কনফিগারে না থাকে। প্রত্যাবর্তন করা বস্তুর ফাঁদে ফেলা ভাল এবং সমাধানের আগে শূন্যতার জন্য পরীক্ষা করুন। "মাইসেটেটিং" কনফিগারেশনে না থাকলে এটি চালানোর চেষ্টা করুন এবং আপনি ব্যতিক্রম পপটি দেখতে পাবেন। পরিবর্তে নীচের মতো কিছু নিরাপদ হতে পারে ... স্ট্রিং কী = "মাইসেটেটিংস"; স্ট্রিং মান = কনফিগারেশন ম্যানেজার.অ্যাপসেটিংস [কী]; if (মান == নাল) মান = "অজানা মান";
জো হ্যালি

1
সত্য যে .ToString () এর কোনও প্রয়োজন নেই কারণ এটি একটি স্ট্রিং
রোলা

2
@ জোএইলি আপনি এটিকে ছোট করে তুলতে পারবেন এবং নাল string value = ConfigurationManager.AppSettings[key] ?? "unknown value"
কোলেসিং

আমি ভাবছি যে এই উত্তর এবং ওপির প্রশ্নের কোডের মধ্যে পার্থক্য কী! তারা কি এক নয়?
user1451111

6

যদি কলার অন্য প্রকল্প হয় তবে আপনার কলার প্রজেক্টে কনফিগারেশনটি কল করা উচিত নয় not


6

আমি এই সমাধানটি বেশ সহায়ক বলে মনে করেছি । এটি কনফিগারেশন ম্যানেজার মোড়ানোর জন্য সি # 4.0 ডায়নামিকঅবজেক্ট ব্যবহার করে। সুতরাং পরিবর্তে এই যেমন মান অ্যাক্সেস:

 WebConfigurationManager.AppSettings["PFUserName"]

আপনি তাদের সম্পত্তি হিসাবে অ্যাক্সেস করুন:

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

সম্পাদনা : লিঙ্কের ক্ষেত্রে কোড স্নিপেট যুক্ত করা বাসি হয়ে যায়:

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

দুটি ওয়েবকনফিগ ফাইল থাকবে। আমি মনে করি আপনি এই দুটি ফাইলের সাথে বিভ্রান্ত থাকতে পারেন।

এই চিত্রটি দেখুন:

এই লিঙ্কটি ক্লিক করুন এবং এই চিত্রটি পরীক্ষা করুন

এই চিত্রটিতে আপনি দুটি ওয়েবকনফিগ ফাইল দেখতে পারেন। প্রকল্পের ফোল্ডারে থাকা ভিউ ফোল্ডারে নয় এমনটিতে আপনার ধ্রুবকগুলি যুক্ত করা উচিত

আশা করি এটি আপনাকে সহায়তা করতে পারে


1

এই প্রকল্পটি যদি অন্য প্রকল্পের দ্বারা ব্যবহৃত হয় তবে এই সমস্যাটি ঘটে। নিশ্চিত হয়ে নিন যে আপনি পিতামাতার প্রকল্পের অ্যাপকনফাইগ বা ওয়েব কোডফাইগে অ্যাপ্লিকেশন সেটিং কীগুলি অনুলিপি করেছেন।


1

এছাড়াও আপনি app.configফাইল থেকে স্ট্রিংয়ের মান পেতে এই লাইনটি চেষ্টা করতে পারেন ।

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

0

। কনফিগ ফাইলে নীচে সেটিংস ধরে রেখে:

<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"]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.