.net-core - 是否可以清除 .net core 配置中的数组?

标签 .net-core azure-webjobs

现在我正在配置一个系统来监视特定队列并对其进行操作。我需要配置每个队列处理程序应与之交互的队列列表,因此我创建了一个 appsettings.json 文件,如下所示:

{
    "AppSettings": {
        "Queues": [
            {
                "Name": "First",
                "Type": "Type1"
            }           ]
    }
}

我在开发时将处理的队列将不同于队列机器 X 将处理的队列,这将不同于队列机器 Y 将处理的队列。

现在,我正在 Azure 上将此系统部署为 Webjobs,并使用 Azure 本身的应用程序设置面板通过环境变量覆盖应用程序的设置。

但是,这在数组上会失败。目前,我使用 AppSettings:Queues:0:xxxxx 语法进行覆盖,效果很好。我什至可以通过更改该语法中的索引,通过环境变量向列表添加其他条目。

问题是,在开发过程中,我向本地 appsettings.json 文件添加了一个额外的队列条目,以便测试一些新功能。部署后,即使没有设置 AppSettings:Queues:1:xxxxx 环境变量,它仍然使用已部署的 appsettings.json 文件中的第二个条目。

有什么方法可以告诉重写我想要一个干净的数组吗?这将导致不确定性,因为我们无法确保开发人员不会添加测试条目,从而导致非测试环境执行错误的操作。这将导致我们无法部署 appsettings.json,这意味着我们无法在所有安装中部署和管理合理的默认设置。

唯一的解决方法是提出任意数字(例如 10)并为它们创建空覆盖,但我相信这只是在拖延时间。

最佳答案

总结评论:

将设置移至 appsettings.Development.json。然后您可以存储生产设置

  1. 在 appsettings.json
  2. 根本不发布 appsettings.json,并在 Azure Web 应用中使用 appsettings:

app settings in web app

奖励:您可以使用 IOptions feature 而不是使用 AppSettings:Queues:0:xxxxx :为您的设置创建 POCO:

public class Settings
{
    public List<Queue> Queues { get; set; }
}

public class Queue
{
    public string Name { get; set; }
    public string Type { get; set; }
}

将它们注入(inject)您的 Startup.cs 中:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<Settings>(Configuration.GetSection("AppSettings"));
}

并在代码中将它们用作列表!

Settings

关于.net-core - 是否可以清除 .net core 配置中的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41944516/

相关文章:

azure - 发布为 Azure WebJob 在 VS 2013 中不起作用

api - Docker:Docker运行后无法在浏览器上启动.Net Core 3.1 Web Api

azure - 在 Azure 门户中哪里可以找到自定义指标

c# - Azure 网络作业 : An attempt was made to access a socket in a way forbidden by its access permissions x. x.x.x:80

c# - 在 Azure 中扩展应用程序服务时,是否会在所有实例上处理单个消息(来自队列)?

Azure Web 作业 VS azure 批处理 VS 辅助角色

c# - "correct"创建没有后台服务的 .NET Core 控制台应用程序的方法

linux - 如何在 Linux 中的 dotnet core 中创建 GUI?

c# - 在 XUnit 中运行 BenchmarkDotNet

c# - Azure webjobs 不会使用 Azure 应用程序设置覆盖 appsettings.json