Como atualizar as chaves (Adicionar / Modificar / Excluir) na seção AppSettings do web.config no tempo de execução
Eu gosto de atualizar chaves / valores definidos emAppSettings
Seção deWeb.config
em tempo de execução. no entanto eu não quero realmente salvá-los paraWeb.config
Arquivo.
Eu tenho um enorme aplicativo web que consiste em vários módulos, DLLs e arquivos de código-fonte. Um monte de informações críticas variava de configuração do banco de dados, chaves de criptografia, nome de usuário e senhas para webservices são salvos emAppSettings
seção doweb.config
Arquivo. Requisito recente do projeto precisa que eu mova esses valores para foraweb.config
e mantenha em um armazenamento seguro.
Eu já assegurei esses valores em um local externo e posso lê-los novamente quando o aplicativo é iniciado.
Aqui está o código de exemplo.
Global.asax
public class Global: System.Web.HttpApplication {
protected void Application_Start(object sender, EventArgs e) {
Dictionary<string, string> secureConfig = new Dictionary<string,string>{};
// --------------------------------------------------------------------
// Here I read and decrypt keys and add them to secureConfig dictionary
// To test assume the following line is a key stored in secure sotrage.
//secureConfig = SecureConfig.LoadConfig();
secureConfig.Add("ACriticalKey","VeryCriticalValue");
// --------------------------------------------------------------------
foreach (KeyValuePair<string, string> item in secureConfig) {
ConfigurationManager.AppSettings.Add(item.Key, item.Value);
}
}
}
Como você pode notar, não é viável alterar as referências aAppSettings
em um código enorme criado por várias equipes de programação para ler suas configurações do meusecureConfig dictionary
e por outro lado eu não deveria salvar esses valores emweb.config
arquivo que está disponível para administradores e operadores da web, administradores do sistema e administradores da nuvem.
Para facilitar a vida dos programadores, quero que eles adicionem seus valoresAppSettings
Seção deweb.config
durante o desenvolvimento, mas eles serão removidos de lá e colocados para proteger o armazenamento mais tarde durante a implantação, no entanto, esses valores devem estar disponíveis para serem programados de forma transparente, pois ainda estão disponíveis.AppSettings
seção.
Questão: como posso adicionar valores aAppSettings
em tempo de execução para que o programa possa lê-los usandoConfigurationManager.AppSettings["ACriticalKey"]
para obter"VeryCriticalValue"
sem salvá-los no Web.Config?
Observe: ConfigurationManager.AppSettings.Add(item.Key, item.Value);
me dáConfigurationErrorsException
com mensagemThe configuration is read only.
Observe: De preferência, algumas configurações devem poder permanecerAppSettings
como antes