首页 > 解决方案 > 覆盖 asp.net 核心中的 appsettings 值

问题描述

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

启动.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();

不知道为什么我需要这样做以及如何解决这个问题。

标签: c#azureasp.net-coreasp.net-core-webapi

解决方案


您的文件没有被读取的原因是appsettings.json因为您没有调用SetBasePath. ConfigurationBuilder这通常是使用Directory.GetCurrentDirectory()in为您处理的WebHost.CreateDefaultBuilder,它本身用于 in Program.cs

虽然你可以只调用SetBasePath你的构造函数,但是当你可以使用传入的实例时Startup,没有真正的理由创建你自己的实例。这个实例已经配置为从环境变量和环境变量中读取环境变量覆盖那些中指定。IConfigurationIConfiguration appsettings.jsonappsettings.json

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


推荐阅读