我有可用的 Web 客户端,它使用“wwwroot/appsettings.json”文件进行配置。
现在我只想使用环境变量覆盖单个设置(例如,实际上会有很多任意的覆盖)。有没有类似ASP.NET Core server的即用机制(调用扩展方法,结合json,env.variables)?
我不询问多个 .json 文件并根据 ENVIRONMENT 变量在它们之间切换,这是完全不同的场景。
到目前为止,我什至没有找到任何接近的东西,所以考虑 DIY 方法我看到了一条丑陋的路径——将客户端配置文件移动到托管服务器,在客户端 .json 文件中添加主节点,如“客户端”,使用环境变量带有前缀“客户端”,使用 ASP.NET 服务器机制合并这些数据,将其转储回文件以供客户端使用。并希望它会起作用 :-)。
最佳答案
所以我遵循了 DIY 路径 :-) 如果有人喜欢这里的步骤:
在 Web 客户端 wwwroot 中创建 3 个空 JSON 文件 -- appsettings.json、appsettings.Development.json 和生产版本
例如,将您的整个 Web 客户端配置放在位于“CLIENT”节点的托管服务器上的 appsettings.json 中
在您的服务器启动构造函数中像往常一样创建配置,然后获取整个“CLIENT”部分并将其“jsonize”回来(参见:https://stackoverflow.com/a/62533775/6734314)——将其转换为字符串并写入 $"wwwroot/appsettings.{env.EnvironmentName}.json”(其中
env
是IWebHostEnvironment
)
就是这样——我在开发模式和生产模式下对其进行了测试。我看到的唯一缺点是:
- 看起来很奇怪:-)
- 当使用 VS 执行时,写入的文件不是相对于二进制文件,而是相对于项目——所以当你完成后你必须删除新创建的文件(否则在下一次运行时 VS 会提示两个静态文件之间存在冲突文件)
您可以使用 env 覆盖设置。服务器端的变量使用“CLIENT”前缀,其余的和往常一样。
郑重声明,我并不是说这是完美的,但除了我在问题中提出的要求外,我没有寻找任何其他东西。然而,我想做的是减少步骤的数量,或者更好地使用一些已经存在的机制。对于这些领域内的改进/提示,我将不胜感激。
关于c# - 如何使用环境变量覆盖 Blazor 客户端配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66744484/