【问题标题】:Reloadable custom config for ASP.NET Core app hosted on Azure App Service托管在 Azure 应用服务上的 ASP.NET Core 应用的可重新加载自定义配置
【发布时间】:2018-07-04 09:08:22
【问题描述】:

我需要为我的网站公开几个简单的配置选项,这些选项应该很容易更改,无需重新编译或重新启动应用程序。我还希望将选项缓存在应用程序中,但是当配置更改时(或至少每隔几分钟)它们应该刷新。我的网站是一个 ASP.NET Core MVC 应用程序,它运行在 Azure App Service 上,通过推送到 git 存储库进行部署,然后使用 Kudu 进行重建。

我正在考虑将 Configuration 与 EF 提供程序一起使用,但它需要做很多工作才能支持在数据更改时重新加载配置。

我注意到 JSON 配置提供程序具有“reloadOnChange”选项,因此这似乎是一个不错的选择。但是,我不确定应该将 JSON 文件放在 Azure 应用服务环境中的哪个位置,以便应用轻松读取它、在所有实例之间共享并在部署之间持久保存。我知道“d:\home”文件夹是共享且持久的。 wwwroot 在其中,但我担心在重新部署应用程序时该文件可能会在某个时候被删除。所以我想把它放在一个父文件夹中,但是如何从 C# 代码访问主文件夹?我假设我不应该只是硬编码“d:\home”路径。

我也很想知道实现目标的任何替代方法。

【问题讨论】:

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


    【解决方案1】:

    其实你不用担心重新部署时它会删除appsetting.json文件。如果您更改配置,它将覆盖 json 文件。

    var configuration = new ConfigurationBuilder()
               .SetBasePath(System.IO.Directory.GetCurrentDirectory())
               .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
               .AddEnvironmentVariables()
               .Build();
    

    注意:发布应用时,切记不要点击Remove additional files at destination”。

    另外,如果你想在主文件夹中设置appsetting.json,你可以使用Environment.GetEnvironmentVariable("Home");,它等于“D:\home”。

    如果你这样设置,你需要设置ASPNETCORE_ENVIRONMENT区分你的环境是天蓝色还是本地

    【讨论】:

    • 对不起,我忘了添加我通过推送到 git 存储库进行部署,然后 kudu 在每次部署时在服务器上重建项目。你知道这种部署方式保证文件不被删除吗?
    • 不管是删除还是覆盖,最终的结果都是一样的,所有的设置都是最新的。而且我认为您不需要将json文件设置为主文件夹,当它更改时,它将重新加载到webapp。
    • 我不想在 JSON 文件中存储一些常量,而且我不能丢失它,因为这样会使用默认值。我想答案是将文件存储在主文件夹中并使用 Environment.GetEnvironmentVariable("Home") 引用它。
    猜你喜欢
    • 2021-10-28
    • 2018-05-17
    • 2020-08-29
    • 2020-12-06
    • 2020-01-25
    • 2020-12-13
    • 2018-06-14
    • 2020-01-13
    • 1970-01-01
    相关资源
    最近更新 更多