【问题标题】:Avoiding duplicated values in Web.config避免 Web.config 中的重复值
【发布时间】:2016-08-26 00:39:50
【问题描述】:
<appSettings>
    <add key="ApiKey" value="xyz"/>
</appSettings>

<system.net>
  <mailSettings>
    <smtp deliveryMethod="Network">
      <network host="smtp.cloudmailapp.com" port="587" userName="user@gmail.com" password="xyz" />
    </smtp>
  </mailSettings>
</system.net>

如您所见,API 密钥“xyz”出现了两次,硬编码。

我可以在这里使用代码吗?我希望能够打电话

WebConfigurationManager.AppSettings["ApiKey"]

在 Web.config 文件或类似文件中。

【问题讨论】:

    标签: c# web-config


    【解决方案1】:

    我认为您的问题的简短回答是否定的。配置文件不能像您尝试添加开箱即用那样包含 C# 代码。

    我确实找到了另一个帖子,它提出了一个与此非常相似的问题。它来自几年前,但其中有很多反馈,看起来它可能适用于这里。我不会试图总结最佳答案,而是添加一个链接。 Variables within app.config/web.config

    【讨论】:

      【解决方案2】:

      我不确定将变量添加到配置文件的工作流程是什么,但也许作为其中的一部分,您可以在 web.config 顶部运行一些东西以确保没有重复项。

      虽然在 web.config 中放置配置值很方便,但它并不是真正存储应用程序设置的地方。造成这种情况的原因有很多:

      • 可维护性(您的重复问题是一个)
      • 安全性(除非您加密 web.config)
      • 对 web.config 的更改重新启动 .NET 应用程序

      最好将它们放入数据库并从那里检索它们。处理数据库后,您可以设置索引,以便不允许重复等。

      【讨论】:

      • 这些都是好点。使用 Azure,您可以在门户中设置将在运行时覆盖 web.config 中的值的值。这并不能解决我的重复问题,但这是方案中的一个小问题。同样对于一两个人的团队,源代码中的秘密也不是问题。
      • 它不是保密的,它的安全性。如果您的 web.config 文件被泄露,那么任何拥有该文件的人现在都可以访问数据库等。
      • 秘密是指键和值。如果发生这种情况,那么它可能无论如何都结束了:stackoverflow.com/questions/4434969/…stackoverflow.com/questions/676292/…。就像我说的,使用 Azure,web.config 可以包含在部署时在运行时覆盖的测试值。生产值在门户中设置。但你是对的,加密也更彻底,即使它们只是测试值。
      猜你喜欢
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 2019-06-15
      • 2020-09-23
      • 1970-01-01
      • 2013-01-31
      • 2016-04-16
      • 1970-01-01
      相关资源
      最近更新 更多