覆盖ASP.NET Core中的appsettings值

时间:2018-12-18 04:41:28

标签: c# azure azure-web-sites asp.net-core-webapi appsettings

我通过在azure门户中配置它们覆盖了appsettings.json文件中设置的值。 为此,我进行了以下更改,这些更改可以正常运行,除非调试代码。

Startup.cs

public Startup(IConfiguration configuration, IHostingEnvironment env)
{
    Configuration = configuration;

    IConfigurationBuilder builder = new ConfigurationBuilder();

    builder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

    builder.AddEnvironmentVariables();

    Configuration = builder.Build();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

    DBContext.ConnectionString = Configuration.GetConnectionString("Connectionstr");
    Constants.AppLogicURI = Configuration["MailUri:LogicAppUri"];
    Constants.BlobStorageKey = Configuration["BlobKey:BlobStorageKey"];
    Constants.BlobStorageConnectionString = Configuration["BlobConnectionString:BlobStorageConnectionString"];
    Constants.BlobUri = Configuration["Uri:BlobUri"];
    Constants.StorageAccount = Configuration["AccountName:StorageAccount"];
}

在调试代码时,由于哪个应用程序无法启动,我没有从appsettings.json文件中获取任何值。

仅当我在行Configuration = builder.Build();中注释掉

不确定为什么需要这样做以及如何解决此问题。

3 个答案:

答案 0 :(得分:1)

更改

Configuration["BlobKey:BlobStorageKey"];

收件人

Configuration.GetSection("BlobKey:BlobStorageKey");

因为ConfigurationStartup.Configuration,并且您在Program.cs中具有 Build(),所以您需要注释掉Configuration = builder.Build();

答案 1 :(得分:1)

未读取appsettings.json文件的原因是因为您没有在ConfigurationBuilder上调用SetBasePath。通常可以在Directory.GetCurrentDirectory()中使用WebHost.CreateDefaultBuilder中的Program.cs来处理此问题,而SetBasePath中使用了Startup

尽管您可以在IConfiguration构造函数中调用IConfiguration,但是当您可以使用appsettings.json时,没有真正的理由创建自己的appsettings.json实例正在被传入。此实例已配置为从两者 appsettings.json和环境变量读取,环境变量将覆盖date_range中指定的环境变量。

在Azure门户的“应用程序设置”和“连接字符串”部分中指定的任何设置都将覆盖{{1}}文件中指定的设置,因为它们是作为环境变量添加到Azure环境中的。

答案 2 :(得分:0)

您不需要自己构建配置,当您在WebHost.CreateDefaultBuilder(...)中调用Program.cs时,.NET Core代码会为您完成配置。

.NET Core将配置不同的提供程序,例如Azure保管库,JSON文件,环境变量,命令行等。

Startup中唯一需要的是

Configuration = configuration;

您已经在Startup方法的顶部有了它,这就是为什么当您注释掉Configuration = builder.build();代码时它可以工作的原因。

您可以在Configuration documentation中找到有关不同提供程序的更多信息以及读取变量的顺序。

编辑

文档显示了.NET Core为您自动添加的提供程序的顺序。关于提供者的部分的最后一句话说:

  

当您初始化新的提供程序时,将按此顺序提供程序   带CreateDefaultBuilder的WebHostBuilder。有关更多信息,请参见   Web Host: Set up a host

请查看指向CreateDefaultBuilder的链接,因为这也说明了该方法默认为您配置的内容。