【问题标题】:How can I change a setting in appsettings.json after auto-deploy?自动部署后如何更改 appsettings.json 中的设置?
【发布时间】:2016-10-23 19:09:33
【问题描述】:

我有一个 ASP.NET Core 应用程序正在运行,并在其上设置了 Github 自动部署。但由于它是一个开放的 repo,我显然不想上传正确的配置文件。

我想做的是在 github 自动部署后替换 appsettings.json 中的一些字符串。

"AppSettings": {
    "Token": "my super duper secret token"
}

在 Azure 上部署 github 后,如何将 my super duper secret token 更改为我的真实令牌?

【问题讨论】:

    标签: asp.net azure azure-web-app-service


    【解决方案1】:

    据我所知,我们可以在 Azure 端口的应用设置中配置令牌。 我对此进行了测试,它成功了,以下是我的详细步骤。

    1. 创建一个 Asp.net 核心应用程序。
    2. 在 appsetting.json 文件中添加 [AppSettings] 部分(令牌值:mysecretkey)。
    3. 在创建的项目下添加公共类AppSettings.cs。
    4. 在Startup.cs文件的ConfigureService函数中添加代码services.Configure<AppSettings>(Configuration.GetSection("AppSettings"))(对于.net Core 1.0)

    注意:模型绑定的语法已从 RC1 更改为 RC2。使用services.Configure<AppSettings>(Configuration.GetSection("AppSettings")),不再可用为了将设置类绑定到您的配置,您需要在 Startup.cs 的 ConfigureServices 方法中进行配置: services.Configure<AppSettings>(options => Configuration.GetSection("AppSettings").Bind(options));

    5. 将代码添加到 HomeController.cs 文件。

    1. 将 WebApp 发布到 Azure 门户。
    2. 在 Azure 门户中添加 [AppSettings: Token]。
    3. 浏览 WebApp 并选择 about 选项卡以查看令牌值是在门户中设置的值。

    【讨论】:

    • 不错的帖子,使用令牌对我来说效果很好,但它的第 7 部分是这里的问题。在我将其设置为 AppSettings.Token 并将其更改为使用 : 之前。但是当我 FTP 进入我的应用程序时,我可以清楚地看到该值尚未更新。有什么想法吗?
    • 写得很好。谢谢:)
    • @staticelf 是的,应该使用AppSettings:Token。也可以在第7部分的截图中找到。在Azure门户中添加appsetting值后,它不会覆盖appsetting.json文件中的原始值。Azure门户中appsetting中设置的数据将是通过在网站内部运行的代码在运行时检索。更多详情请参考document
    • 我可以直接在 VS 2017 的“发布”设置中管理设置,有一个链接“编辑应用服务设置”会弹出一个窗口直接输入AppSettings:Token,无需去在浏览器中访问 Azure 门户。
    • 我收到一条错误消息,提示 App setting names can only contain letters, numbers (0-9), periods ("."), and underscores ("_") 你们是如何管理的?我正在使用asp.net core 3.1
    【解决方案2】:

    假设网站已经作为 Azure 中的资源存在,您可以简单地在门户中设置应用程序设置/连接字符串。这些将在运行时覆盖 appsettings.json 文件中的那些。 IE。您的应用程序将首先查看 azure 应用程序设置/连接字符串,然后再在本地文件中查找它们。这是 asp.net core 的“云优先”配置管理方法的一部分。当您将代码部署到应用程序/插槽时,这些设置不会被覆盖。

    在这里找到了一个blog post,它更详细地描述了它,使用.AddEnvironmentVariables() 调用将天蓝色插槽设置添加到配置中。

    【讨论】:

      【解决方案3】:

      开发者工具设置中有代码编辑功能(设置 -> 开发工具 -> 应用服务编辑器(预览版))。您可以去那里更改您喜欢的任何文件。但是您可能需要重新启动 Web 应用程序(通过编辑 web.config 或其他方式)。您也可以使用 Kudu(高级工具),但它不像第一个选项中的 Visual Studio Code 那样令人愉快。

      虽然处理应用程序机密的更高级和正确的方法是特殊机密管理器。您可以在 asp.net 文档here 上阅读更多相关信息。

      通常,这是一种从受保护的数据存储中加载机密并在生产环境中使用环境变量覆盖它们的方法(可以在 azure Web 应用中设置)。

      【讨论】:

        【解决方案4】:

        如果您使用 Azure DevOps Release 进行部署,您可以轻松地为每个环境/阶段指定属性。 您可以使用任务文件转换并指明appsettings.json 的路径:

        或者,如果您直接部署到 Azure:

        所以你只需要创建变量来覆盖设置中的数据:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-09-27
          • 2022-07-14
          • 2017-01-15
          • 1970-01-01
          • 2018-09-15
          • 1970-01-01
          • 1970-01-01
          • 2022-07-02
          相关资源
          最近更新 更多