在其他Web.config部分中使用appSettings值

时间:2009-08-12 11:20:18

标签: asp.net

有没有办法在web.config文件的任何其他部分中使用appSettings定义的属性?

在多个部分中编写一个值(例如,一个电子邮件地址)是非常不愉快的,并且只要更改完成就会更新它。

2 个答案:

答案 0 :(得分:2)

您可以使用String.Format来构建数据,并在配置文件中的适当位置使用{0}
假设你有基本的getter数据,这应该很容易实现。

例如:

<add key="Mail" value="kobi@example.com"/>
<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);
}

答案 1 :(得分:-1)

如果在AppSetting值中使用$分隔符,则可以使用它们在AppSettings中表示的键值替换它们,例如

<add key="PrivacyPolicyURL" 
  value="$domain$/Default.aspx?siteid=$siteid$&amp;locid=$locid$&amp;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;
}

因此,在示例中,这将为域,siteid,locid和tpid插入AppSettings以生成类似的内容; www.mywebsite.com/Default.aspx?siteid=1001&locid=1001&tpid=1001