簡體   English   中英

使用 ConfigurationManager 從 Web.Config 讀取密鑰

[英]Reading a key from the Web.Config using ConfigurationManager

我正在嘗試從與 web 層不同的層中的Web.config文件中讀取密鑰(相同的解決方案)

這是我正在嘗試的:

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

這是我在Web.config文件中的appSettings

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

當我調試代碼時, usernamepassword只是null ,所以它沒有得到鍵的值。

讀取這些值我做錯了什么?

嘗試改用 WebConfigurationManager 類。 例如:

string userName = WebConfigurationManager.AppSettings["PFUserName"]
  var url = ConfigurationManager.AppSettings["ServiceProviderUrl"];

我發現這個解決方案非常有幫助 它使用 C# 4.0 DynamicObject 來包裝 ConfigurationManager。 因此,不要像這樣訪問值:

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

如果調用者是另一個項目,您應該在調用者項目中編寫配置而不是被調用者。

它的完整路徑是

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

將有兩個 Web.config 文件。 我想您可能對這兩個文件感到困惑。

檢查此圖像:

單擊此鏈接並檢查此圖像

在此圖像中,您可以看到兩個 Web.config 文件。 您應該將常量添加到項目文件夾中而不是視圖文件夾中的常量

希望這可以幫助你

如果另一個項目正在使用此項目,則會發生此問題。 確保將應用設置鍵復制到父項目的 app.config 或 web.config。

您也可以嘗試使用這一行從app.config文件中獲取字符串值。

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

假設 .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"];
    }
}

對不起,我沒有測試過這個,但我認為它是這樣完成的:

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

//usage: config.AppSettings["xxx"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM