如何使用环境变量覆盖 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" (其中 env
是 IWebHostEnvironment
)
就是这样——我在开发模式和生产模式下对其进行了测试。我看到的唯一缺点是:
- 看起来很奇怪:-)
- 当使用 VS 执行时,写入的文件不是相对于二进制文件,而是相对于项目——所以当你完成后你必须删除新创建的文件(否则在下一个 运行 VS 将抱怨两个静态文件之间的冲突)
您使用 env 覆盖了设置。服务器端变量使用“CLIENT”前缀,其余照常。
郑重声明,我并不是说这是完美的,但除了我在问题中提出的要求外,我没有寻找任何其他东西。然而,我想做的是减少步骤的数量,或者更好地使用一些已经存在的机制。我将感谢那些领域内的 improvements/tips。
我有可用的 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" (其中
env
是IWebHostEnvironment
)
就是这样——我在开发模式和生产模式下对其进行了测试。我看到的唯一缺点是:
- 看起来很奇怪:-)
- 当使用 VS 执行时,写入的文件不是相对于二进制文件,而是相对于项目——所以当你完成后你必须删除新创建的文件(否则在下一个 运行 VS 将抱怨两个静态文件之间的冲突)
您使用 env 覆盖了设置。服务器端变量使用“CLIENT”前缀,其余照常。
郑重声明,我并不是说这是完美的,但除了我在问题中提出的要求外,我没有寻找任何其他东西。然而,我想做的是减少步骤的数量,或者更好地使用一些已经存在的机制。我将感谢那些领域内的 improvements/tips。