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

标签 c# environment-variables blazor blazor-webassembly

我有可用的 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”(其中 envIWebHostEnvironment)

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

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

您可以使用 env 覆盖设置。服务器端的变量使用“CLIENT”前缀,其余的和往常一样。

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

关于c# - 如何使用环境变量覆盖 Blazor 客户端配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66744484/

相关文章:

c# - ASP.Net Core 2.1 ASPNETCORE_ENVIRONMENT 值未反射(reflect)

B2C 身份验证后重新加载 Blazor 应用程序

java - 如何使用java或C#计算执行时间

c# - c#中的内部类和公共(public)类有什么区别?

php - 在 apache envvars 中获取系统范围的环境变量是否安全?

php - 如何使环境变量可用于 Apache,作为服务启动?

c# - 通用枚举类型扩展方法的随机枚举值

c# - 更新页面而不刷新它

c# - Blazor 服务器 : Mixing EF Core DbContextFactory with DbContext

c# - 断点不会在 Blazor Webassembly 项目、ASP.NET Core 3.1、