如何使用环境变量覆盖 Blazor 客户端配置?

How to override blazor client configuration with environment variables?

我有可用的 Web 客户端,它使用“wwwroot/appsettings.json”文件进行配置。

现在我只想使用环境变量覆盖单个设置(例如,实际上会有很多任意的覆盖)。是否有现成的机制,类似于ASP.NET核心服务器(只需要调用扩展方法并结合json,环境变量)?

不是询问多个.json文件并根据环境变量在它们之间切换,这是完全不同的场景。

到目前为止我什至没有找到任何接近的东西,所以考虑 DIY 方法我看到了一条丑陋的路径——将客户端配置文件移动到托管服务器,在客户端添加主节点。json 文件如“ client”,使用前缀为“client”的环境变量,使用 ASP.NET 服务器机制合并这些数据,将其转储回文件以供客户端使用。并希望它会起作用:-)。

所以我遵循了 DIY 路径 :-) 如果有人喜欢这里的步骤:

  • 在 Web 客户端 wwwroot 中创建 3 个空文件 JSON -- appsettings.json、appsettings.Development.json 以及生产版本

  • 将您的整个 Web 客户端配置放在 appsettings.json 的托管服务器中,例如“CLIENT”节点

  • 在您的服务器启动构造函数中像往常一样创建配置,但随后获取整个“CLIENT”部分并将其“jsonize”返回(参见:)--将其转换为字符串并写入 $"wwwroot/appsettings.{env.EnvironmentName}.json" (其中 envIWebHostEnvironment

就是这样——我在开发模式和生产模式下对其进行了测试。我看到的唯一缺点是:

  • 看起来很奇怪:-)
  • 当使用 VS 执行时,写入的文件不是相对于二进制文件,而是相对于项目——所以当你完成后你必须删除新创建的文件(否则在下一个 运行 VS 将抱怨两个静态文件之间的冲突)

您使用 env 覆盖了设置。服务器端变量使用“CLIENT”前缀,其余照常。

郑重声明,我并不是说这是完美的,但除了我在问题中提出的要求外,我没有寻找任何其他东西。然而,我想做的是减少步骤的数量,或者更好地使用一些已经存在的机制。我将感谢那些领域内的 improvements/tips。