有没有办法在web.config文件的任何其他部分中使用appSettings定义的属性?在其他Web.config文件中使用appSettings的值
在多个部分中编写一个值(例如,一个电子邮件地址)是非常令人不愉快的,并且每当更改完成时就更新它发生的任何地方。
有没有办法在web.config文件的任何其他部分中使用appSettings定义的属性?在其他Web.config文件中使用appSettings的值
在多个部分中编写一个值(例如,一个电子邮件地址)是非常令人不愉快的,并且每当更改完成时就更新它发生的任何地方。
您可以使用String.Format
构建数据,并在配置文件中使用{0}
。
假设你有基本的获得者是你的数据,这应该很容易实现。
例如:
<add key="Mail" value="[email protected]"/>
<add key="LinkFormat" value="[[Mail Us|mailto:{0}]]"/>
然后(从try/catch语句剥离下来,检查数据):
public static string GetEmail()
{
return ConfigurationManager.AppSettings["Mail"];
}
public static string GetEmailLinkformat()
{
string format = ConfigurationManager.AppSettings["LinkFormat"];
string mail = GetEmail();
return String.Format(format, mail);
}
如果您在AppSetting使用$
分隔符值,这些可以与被替换它们表示来自AppSettings的关键值,例如
<add key="PrivacyPolicyURL"
value="$domain$/Default.aspx?siteid=$siteid$&locid=$locid$&tpid=$tpid$"
/>
使用以下函数进行替换;
public static string GetAppSetting(string key)
{
string keyValue = ConfigurationManager.AppSettings[key].ToString();
foreach (System.Text.RegularExpressions.Match match in System.Text.RegularExpressions.Regex.Matches(keyValue, @"\$[\d\D]*?\$"))
{
try
{
string replaceWith = ConfigurationManager.AppSettings[match.Value.Replace("$", string.Empty)] ?? string.Empty;
keyValue = keyValue.Replace(match.Value, replaceWith);
}
catch
{
keyValue = keyValue.Replace(match.Value, string.Empty);
}
}
return keyValue;
}
所以在这个例子中,插入了AppSettings的domain,siteid,locid和tpid来产生类似的东西; www.mywebsite.com/Default.aspx?siteid=1001&locid=1001&tpid=1001
这也是一个不错的选择,谢谢!不过,我更关注的是,例如,使用appSettings部分中的不同部分(如log4net部分)中声明的值。无论如何,我想任何选项都会涉及一些编码,不是吗? – 2009-08-12 14:40:42
请问您可以发表一个例子吗? – 2009-08-12 11:30:27
我已经在努力...... – Kobi 2009-08-12 11:31:27
哦,谢谢Kobi,隆重的例子! :-)无论如何,我正在考虑任何解决方案,不需要任何额外的编码......但如果没有其他选择,那将起作用,再次感谢。 – 2009-08-12 11:33:49