代码之家  ›  专栏  ›  技术社区  ›  John-Luke Laue

使用“url”键时出现useconfiguration(config)duplicate key错误

  •  0
  • John-Luke Laue  · 技术社区  · 6 年前

    使用.NET Core 2.0

    问题: 如果使用包含名为“url”的json对象的json配置文件,并让启动类构造函数接受iconfiguration参数,则会引发错误:

    已添加具有相同密钥的项。

    如果将密钥名称更改为其他名称,则错误将消失。 另一个奇怪的是,允许在配置文件中有重复的键(它们会覆盖),但是由于某些原因,“url”特别导致了这个错误。

    public static class Program
    {
        public static void Main(string[] args)
        {
            var config = new ConfigurationBuilder()
            .AddJsonFile("config.json", optional: false, reloadOnChange: true)
            .Build();
    
            BuildWebHost(args, config).Run();
        }
    
        public static IWebHost BuildWebHost(string[] args, IConfiguration config) =>
            CreateBasicBuilder(args)
                .UseConfiguration(config)
                .UseStartup<Startup>()
                .Build();
    
        public static IWebHostBuilder CreateBasicBuilder(string[] args)
        {
            var builder = new WebHostBuilder();
    
            if (string.IsNullOrEmpty(builder.GetSetting(WebHostDefaults.ContentRootKey)))
            {
                builder.UseContentRoot(Directory.GetCurrentDirectory());
            }
    
            builder.UseKestrel()
                .UseIISIntegration()
                .UseDefaultServiceProvider((context, options) =>
                {
                    options.ValidateScopes = context.HostingEnvironment.IsDevelopment();
                });
    
            return builder;
        }
    }
    
    public class Startup
    {
        private readonly IHostingEnvironment _env;
        private readonly IConfiguration _config;
    
        public Startup(IConfiguration config, IHostingEnvironment env)
        {
            _env = env;
            _config = config;
        }
    
        //other startup code below...
    }
    

    这里是config.json:

    {
      "Urls": {
        "MyUrl": "https://test.com"
      }
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   John-Luke Laue    6 年前

    正如我所怀疑的,在 Microsoft.AspNetCore.Hosting.Abstractions

    here here .

    因此,您可以使用“url”键,但该值必须是字符串。我有一个对象,所以它不会试图覆盖,而是尝试在字典中添加一个新条目,我会得到我看到的错误。

    所以我的解决办法是不使用“url”作为密钥。