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

重写ASP.NET核心中的AppSettings值

  •  0
  • XamDev  · 技术社区  · 6 年前

    我将通过在Azure门户中配置值来覆盖appsettings.json文件中设置的值。 为了做到这一点,我做了以下更改,这些更改工作正常,除非我调试代码。

    创业公司

    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 回复  |  直到 6 年前
        1
  •  1
  •   Kirk Larkin    6 年前

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

    尽管你可以打电话 设置数据库 在你 Startup 构造函数,没有真正的理由创建自己的 IConfiguration 实例时,您可以只使用 形象塑造 那是被传进来的。此实例已配置为读取 二者都 应用设置.json 和环境变量,环境变量将覆盖在 应用设置.json .

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

        2
  •  0
  •   Simply Ged Saeed    6 年前

    您不需要自己构建配置,.NET核心代码在您调用 WebHost.CreateDefaultBuilder(...) 在里面 Program.cs .

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

    你唯一需要的 Startup

    Configuration = configuration;
    

    你已经把这个放在 启动 方法,这就是当您注释 Configuration = builder.build(); 代码。

    您可以进一步了解不同的提供程序以及变量在 Configuration documentation .

    编辑

    文档显示.NET核心自动为您添加的提供程序的顺序。关于提供者一节的最后一句话是:

    当初始化新的 带的WebHostBuilder CreateDefaultBuilder . 有关详细信息,请参阅 Web Host: Set up a host .

    查看链接到 CreateDefaultBuilder 因为这也解释了默认情况下该方法为您配置的内容。

        3
  •  0
  •   Joey Cai    6 年前

    变化

    Configuration["BlobKey:BlobStorageKey"];

    Configuration.GetSection("BlobKey:BlobStorageKey");

    因为 Configuration Startup.Configuration 你有 生成() 在里面 Program.cs 所以你需要评论一下 Configuration = builder.Build();