从Web读取密钥。使用ConfigurationManager进行配置

我试图从Web.config文件在不同的层比web层读取键(相同的解决方案)

以下是我正在尝试的:

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,所以它没有得到键的值。

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

533401 次浏览

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

string userName = WebConfigurationManager.AppSettings["PFUserName"]

抱歉,我没有测试这个,但我认为它是这样做的:

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


//usage: config.AppSettings["xxx"]
  var url = ConfigurationManager.AppSettings["ServiceProviderUrl"];

如果此项目正被另一个项目使用,则会发生此问题。确保将应用程序设置键复制到父项目的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;
}
}

如果调用方是另一个项目,则应该在调用方项目中编写配置,而不是在被调用方项目中。

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

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

它是全路径

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

将会有两个网络。配置文件。我想你可能把这两个文件搞混了。

查看这张图片:

点击此链接并检查此图像

在这张图中,你可以看到两个Web。配置文件。你应该把你的常量添加到project文件夹中,而不是views文件夹中

希望这对你有所帮助

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