使用“Urls”键时,UseConfiguration(config)重复键错误

时间:2018-06-15 23:17:28

标签: c# asp.net-core

使用.NET Core 2.0

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

已添加具有相同键的项目。

如果您将密钥名称更改为其他任何内容,则错误消失。 同样奇怪的是,您可以在配置文件中包含重复的密钥(它们会被覆盖),但由于某些原因,“Urls”尤其会导致此错误。

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 个答案:

答案 0 :(得分:1)

我怀疑......“网址”在Microsoft.AspNetCore.Hosting.Abstractions

的幕后使用

herehere

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

所以我的修复就是不要使用“Urls”作为密钥。