代码之家  ›  专栏  ›  技术社区  ›  amd

从中的appsettings.json访问字符串数组时为空值。NET核心6

  •  1
  • amd  · 技术社区  · 1 年前

    我正在做一个。NET Core 6项目,我面临一个问题,我总是收到 null 尝试从访问字符串数组时的值 appsettings.json 。以下是我设置一切的方式:

    appsettings.json :

    {
        "ColourCodes": [ "re", "bl", "gr" ]
    }
    

    启动配置:在 Startup.cs ,我有以下设置:

    public Startup(IConfiguration configuration, IWebHostEnvironment environment)
    {
        _environment = environment;
        _configuration = configuration;
    }
    
    public void ConfigureServices(IServiceCollection services)
    {
        services. Configure<Colours>(_configuration.GetSection("ColourCodes"));
        services.AddControllers()
                .AddJsonOptions(jsonOptions =>
                {
                    jsonOptions.JsonSerializerOptions.PropertyNamingPolicy = System.Text.Json.JsonNamingPolicy.CamelCase;
                });
    }
    

    我创建了一个名为 Colours :

    public class Colours
    {
        public List<string> ColourCodes { get; set; }
    }
    

    在我的控制器中,我正试图通过 IOptions :

    private readonly IOptions<List<Colours>> _colours;
    
    public ColorController(IOptions<List<Colours>> colours)
    {
        _colours = colours;
    }
    

    但是,当我尝试访问 _colours ,它总是返回 无效的 。我不确定我在这里遗漏了什么或做错了什么。有人能帮我理解如何正确地从中检索字符串数组吗 appsettings.json ?

    1 回复  |  直到 1 年前
        1
  •  2
  •   Guru Stron    1 年前

    它应该是:

    services.Configure<Colours>(_configuration);
    

    你的 Colours 类表示配置根目录中的安装程序,而不是嵌套的 ColourCodes 部分 _configuration.GetSection("ColourCodes") 将导致 [ "re", "bl", "gr" ] 无法绑定到的部分“已提取” 颜色 正确键入。

    如果您不希望将值存储在另一个JSON对象的配置嵌套的根中:

    {
      "Colours": {
        "ColourCodes": [
          "re",
          "bl",
          "gr"
        ]
      }
    }
    

    并将代码调整为:

    services.Configure<Colours>(_configuration.GetSection("Colours"));