我正在使用Azure网站,其中门户网站可用于覆盖web.config的AppSetting和ConnectionString部分中的值。但是其他部分仍然需要对web.config进行转换或硬编码。我需要对/configuration/system.net/mailSettings/smtp上找到的值应用相同的控制
理想情况下,我想将一个字符串存储在AppSetting值中,然后,当网站启动时,它会解析此字符串并使用AppSettings中找到的已解析值覆盖我的SMTP部分的初始内容。
大图目标:消除对web.config的硬编码smtp值的依赖,而是从门户网站的AppSettings列表中应用这些值。可能的?
THX
答案 0 :(得分:1)
我不太熟悉System.Net.Mail
,但您可以随时阅读并初始化自己的配置。您可以在门户网站中设置以下AppSettings
smtp.host = <hostName>
smtp.port = <port>
smtp.userName = <userName>
smtp.password = <password>
smtp.defaultCredentials = <true | false>
然后在你的代码中有类似的东西。
public SmtpClient GetSmtpClient()
{
Func<string, string> config = s => ConfigurationManager.AppSettings[s] ?? System.Environment.GetEnvironmentVariable(s);
return new SmtpClient
{
Host = config("smtp.host"),
Port = int.Parse(config("smtp.port")), // handle parsing errors
Credentials = new NetworkCredential(config("smtp.userName"), config("smtp.userName")),
UseDefaultCredentials = bool.Parse(config("smtp.defaultCredentials")), //handle parsing errors
};
}
然后在本地调试时,您可以依赖环境变量,在部署到Azure时,您可以使用AppSettings。