我正试着从网上读取密钥。配置文件在不同的层与web层(相同的解决方案)

以下是我正在尝试的:

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

这是我在网上的appSettings。配置文件:

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

当我调试代码的用户名和密码只是空,所以它不是得到键的值。

读取这些值有什么问题吗?


当前回答

我发现这个方法非常有用。它使用c# 4.0 DynamicObject来包装配置管理器。所以不是像这样访问值:

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

其他回答

如果此项目正被另一个项目使用,则会发生此问题。确保将应用程序设置键复制到父项目的app.config或web.config。

我发现这个方法非常有用。它使用c# 4.0 DynamicObject来包装配置管理器。所以不是像这样访问值:

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

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

尝试使用System.Web.Configuration命名空间中的WebConfigurationManager类。例如:

string userName = WebConfigurationManager.AppSettings["PFUserName"]

你也可以尝试从app.config文件中获取字符串值。

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